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

下面这个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)会生效吗?

阅读 6.5k
2 个回答

索引主要根据where中的字段创建,和order by中的字段关系不大。

具体你说的这个sql语句,按照code, start_time, end_time 创建联合索引效果应该是最好的。

一些建议。

  • select后面一定要*吗?只列出需要的字段是会减少查询时间的。
  • 可以考虑在(code, start_time, end_time)上创建索引。
  • 如果选出来的行数不多,就不必为order by建立索引了。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题