
类似美团餐馆的“智能排序”业务上需要这么个排序,不知道怎么下手优化了, 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 条记录的样子 |