您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

索引不一定能提高性能。为了更好地了解正在发生的事情,如果您explain为不同的查询包括了,这将有所帮助。

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

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

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

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

通过在上添加索引,可以使所有这些查询的运行速度更快orders(id_state, id_mp, creation_date)。该where子句将使用前两列,而order by则将使用最后两列。

MySQL 2022/1/1 18:49:38 有334人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶