主键和加过 index 的 column 查询效率差别为什么这么大

2015-03-19 12:43:20 +08:00
 Yo_oY
messages 表里有百万级的数据,这样一个语句:

select * from messages
where site_id = 7
order by created_at desc
limit 1

查询一下需要120s
但是改成 order by id desc ,查询只需要 24ms 。

id是主键,site_id, created_at 都是加过index的。

想知道为什么查询时间差距会这么大?

谢谢!
5295 次点击
所在节点    MySQL
22 条回复
lqs
2015-03-20 01:17:14 +08:00
前者要全表扫描一遍才能知道 site_id = 7 且 created_at 最大的那一行,
后者只需按照 id 从大到小扫描到第一个 site_id = 7 的行就结束了。

你试试把后者的查询条件里的 7 改成一个不存在的值,就和前者一样慢了。
Yo_oY
2015-03-20 10:16:07 +08:00
@lqs 试了一下,改成不存在的值查询也很快,应该不是你说的这个原因。

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

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

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

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

© 2021 V2EX