优化自定义公式的 ORDER BY

2016-06-15 20:09:02 +08:00
 sunchen

类似美团餐馆的“智能排序”业务上需要这么个排序,不知道怎么下手优化了, distance 是根据用户位置算出来的实时距离

ORDER BY priority - LEAST(30, (distance/100)) DESC

2208 次点击
所在节点    问与答
9 条回复
cxbig
2016-06-15 20:16:16 +08:00
背景信息太少,需求也不明确。。。
sunchen
2016-06-15 20:20:01 +08:00
@cxbig 其他信息大概就是还有全表不到千万数据,每次排序前大概有几千到几万条记录会过滤出来排序。数据库 PG ,
其实这问题也不需要什么背景信息吧, SQL 上貌似无解。我就是想来碰碰运气
fcicq
2016-06-15 20:21:08 +08:00
geo 索引
sunchen
2016-06-15 20:22:24 +08:00
索引只能在过滤数据阶段有用,这个自定义的排序无效的
fcicq
2016-06-15 20:37:22 +08:00
@sunchen 楼主再仔细瞪大眼睛! dist >= 3000 的时候退化成 ORDER BY priority - 30.
sunchen
2016-06-15 20:46:36 +08:00
@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 也不等价啊。
fcicq
2016-06-15 20:56:48 +08:00
@sunchen 抱歉漏了 DESC. 但是没有可补充的了. 楼主如果继续这样理解问题的话就无解了.
mko0okmko0
2016-06-15 22:01:38 +08:00
现在执行一次耗时多久阿?
sunchen
2016-06-15 22:21:24 +08:00
@mko0okmko0 去除排序几毫秒,加上排序 100 多 ms ,每次参与排序平均下来不到 10000 条记录的样子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/286009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX