带时间范围的复杂 sql 的优化

2017-10-12 17:05:16 +08:00
 esolve

下面这个 sql 语句

SELECT *
FROM table
WHERE code = 'x83'
AND start_time <= now()
AND end_time >= now()
ORDER BY `priority`, `created_at`

优化的话,是不是要建一个索引(code, priority, created_at) 中间的 start_time 和 end_time 怎么办?

另外只针对 order by 建立索引( priority, created_at )会生效吗?

1563 次点击
所在节点    问与答
5 条回复
canbingzt
2017-10-12 17:08:36 +08:00
mysql 的话,where 里的条件全部都需要建索引,并且顺序也要一致
xinyewdz
2017-10-12 17:10:31 +08:00
建议把 now()函数去掉,直接写值。带函数的字段,应该是没办法使用索引。
esolve
2017-10-12 17:19:00 +08:00
@xinyewdz 这个函数没有施加在字段上啊,是单独的一个函数,也有问题?
esolve
2017-10-12 17:20:30 +08:00
@canbingzt 你意思对 (code, start_time, end_time, priority, created_at) 做索引?
这样不行啊,start_time <= now()是一个范围,所以起作用的索引到 start_time 为止,也就是仅仅(code, start_time )
esolve
2017-10-13 18:37:31 +08:00
顶顶

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

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

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

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

© 2021 V2EX