类似美团餐馆的“智能排序”业务上需要这么个排序,不知道怎么下手优化了, distance 是根据用户位置算出来的实时距离
ORDER BY priority - LEAST(30, (distance/100)) DESC
1
cxbig 2016-06-15 20:16:16 +08:00
背景信息太少,需求也不明确。。。
|
2
sunchen OP @cxbig 其他信息大概就是还有全表不到千万数据,每次排序前大概有几千到几万条记录会过滤出来排序。数据库 PG ,
其实这问题也不需要什么背景信息吧, SQL 上貌似无解。我就是想来碰碰运气 |
3
fcicq 2016-06-15 20:21:08 +08:00
geo 索引
|
4
sunchen OP 索引只能在过滤数据阶段有用,这个自定义的排序无效的
|
6
sunchen OP @fcicq 大部分情况是 where distance < 3000 的, LEAST 是为了兼容一个极端选项
事实上这个问题解决 ORDER BY priority - distance/100 DESC 也行, 另外即使 distance 有大于 3000 的, ORDER BY priority - 30 和 ORDER BY priority - LEAST(30, (distance/100)) DESC 也不等价啊。 |
8
mko0okmko0 2016-06-15 22:01:38 +08:00
现在执行一次耗时多久阿?
|
9
sunchen OP @mko0okmko0 去除排序几毫秒,加上排序 100 多 ms ,每次参与排序平均下来不到 10000 条记录的样子
|