栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在查询中使用LIMIT时MySQL变慢?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在查询中使用LIMIT时MySQL变慢?

索引不一定能提高性能。为了更好地了解正在发生的事情,如果您

explain
为不同的查询包括了,这将有所帮助。

我最好的猜测是您有一个索引,

id_state
甚至
id_state, id_mp
可以用来满足该
where
子句。如果是这样,则不
orderby
使用的第一个查询将使用此索引。它应该很快。即使没有索引,这也需要对
orders
表中的页面进行顺序扫描,这仍然可以非常快。

然后当您添加索引时

creation_date
,MySQL决定使用该索引代替
orderby
。这需要读取索引中的每一行,然后获取相应的数据页以检查
where
条件并返回列(如果存在匹配项)。该读取效率极低,因为它不是按“页面”顺序,而是按索引指定的顺序。随机读取可能效率很低。

更糟糕的是,即使您有一个

limit
,您仍然必须读取 整个
表,因为需要整个结果集。尽管您已经保存了38条记录的排序,但是您创建了一个效率非常低下的查询。

顺便说一句,如果

orders
表无法容纳在可用内存中,这种情况将变得更加严重。然后,您有一个称为“崩溃”的条件,其中每个新记录都倾向于生成一个新的I /
O读取。因此,如果一个页面上有100条记录,则该页面可能必须被读取100次。

通过在上添加索引,可以使所有这些查询的运行速度更快

orders(id_state, id_mp,creation_date)
。该
where
子句将使用前两列,而
order by
则将使用最后两列。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517348.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号