sql 时间字段加索引问题

发布于 2022-09-11 22:01:16 字数 97 浏览 31 评论 0

时间字段,int类型(内容时间戳)
这个字段内容不是唯一,但是大多查询都会对这个字段做 order by 该字段 desc排序查询
请问这样的字段如何加索引?谢谢!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一枫情书 2022-09-18 22:01:16

索引主要看where和order by 后面的条件,如果仅是按时间排序,直接加一个时间字段的索引就好,如果还有其它条件,可以建联合索引。

CREATE INDEX PersonIndex ON Person (updateTime DESC) ;
 -- 对应的查询语句
SELECT * FROM Person ORDER BY updateTime DESC LIMIT 10;

CREATE INDEX IndUpdateName ON Person (updateTime DESC, name) ;
 -- 对应的查询语句
SELECT * FROM Person WHERE name like '%王' ORDER BY updateTime DESC LIMIT 10;

一定要通过EXPLAIN反复比较加不加索引的效果。

迟月 2022-09-18 22:01:16

加普通索引就行了,需要优化的话请贴出explain

寒冷纷飞旳雪 2022-09-18 22:01:16

谢谢邀请。
之前写过一篇索引的文章介绍过你说的这种情况:

mysql一张表查询只能用到一个索引。因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序,如果需要最好给这些列建复合索引。这一点是很多程序猿容易忽略的,如where子句的字段建了索引,排序的字段建了索引,但是分开建的,以为会走索引,其实这样的话排序的字段不会使用索引的,除非建复合索引,切记。

如果这个时间字段只是用来order by,基本按上面的套路来就可以了,记得用Explain来分析性能是否有提升。
如果这个时间字段还有做范围的查询,则需要额外考虑下面的规则:

组合索引时切记此条约束:组合索引中有多个字段,其中一个字段是有范围判断,则需将此字段在最后面。

希望回答对你能有所帮助。

赠我空喜 2022-09-18 22:01:16
  • InnoDB,下Int类型字段加索引,性能上应该有明显提升。而使用MyISAM引擎下,则需要留意,加索引的效果并不一定理想,甚至有可能出现反效果。
  • 另外在写SQL时,不要犯低级的错误,如把int转换成datetime去做比较条件。
  • 配合使用EXPLAIN做优化是个不错的选择,必要时,可以模拟一些生产环境的数据做下性能测试 。

:)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文