【发布时间】:2012-04-29 15:25:46
【问题描述】:
假设我们有一个带有字段的简单 mysql 表(用户):
id
rating
salary
我想在指定范围(50-100)内获得 10 个评分和薪水最高的用户,即在 mysql 中会是
SELECT id from user WHERE salary>50 and salary<100 ORDER by rating limit 0, 10
这在 100K 个用户表上运行 20 毫秒。
假设我在 redis 中有相同的: Zlist 评分 (rating=>user_id) Zlist 工资(salary=>user_id)
我在 redis 中看到的所有解决方案都包括复制 100k 工资 Zlist、删除不需要的条目以及与 100k 评级列表合并,例如
zinterstore 1 search salary
zremrange search -inf 50
zremrange search 100 +inf
zinterstore 2 search rating weights 0 1
zrange search 0 10
这绝对是慢的(为什么要复制 100k 元素来删除大部分?)。
有没有什么方法可以实现这一点,至少与 redis 相当有效?
【问题讨论】:
标签: mysql database search redis