首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ORDER BY和LIMIT时查询速度较慢

使用ORDER BY和LIMIT时查询速度较慢
EN

Stack Overflow用户
提问于 2015-08-25 11:23:33
回答 4查看 191关注 0票数 0

我有一个非常慢的查询,因为使用ORDER BY。现在我知道为什么它很慢了,但我不知道如何让它更快。

这张表有21.000条记录。(速度慢的原因)

代码语言:javascript
复制
SELECT 
 id_registre, 
 section, 
 numero_naissance, 
 annee_naissance, 
 TYPE, 
 prenom_fr, 
 nom_fr, 
 prenom_ar, 
 nom_ar, 
 date_naissance_equivalent, 
 date_redaction_equivalent
FROM registres
ORDER BY annee_naissance, numero_naissance
LIMIT 20010 , 30

我使用limit是因为我使用分页。

这个查询大概需要119秒,这太长了。如果我删除order by子句,这个查询大约需要0.92秒。

我在numero_naissance列的annee_naissance上有索引。

"annee_naissance“和"numero_naissance”列的类型为int(11)

EN

回答 4

Stack Overflow用户

发布于 2015-08-25 11:29:37

此查询的最佳索引是registres(annee_naissance, numero_naissance)上的复合索引。

请注意,这两列需要在同一索引中。

票数 0
EN

Stack Overflow用户

发布于 2015-08-25 16:47:23

您可以尝试强制使用复合索引(以防MySQL优化器选择使用文件排序)

代码语言:javascript
复制
CREATE INDEX naissance_idx ON registres(annee_naissance, numero_naissance);

然后

代码语言:javascript
复制
SELECT * 
FROM registres 
FORCE INDEX(naissance_idx) 
ORDER BY annee_naissance, numero_naissance 
LIMIT 20010,30

但我不确定这是否能将查询时间从119秒减少到1秒。

更多按优化排序的技巧:https://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

票数 0
EN

Stack Overflow用户

发布于 2015-08-25 20:40:24

我测试了EXPLAIN查询

代码语言:javascript
复制
EXPLAIN SELECT 
         id_registre, 
         section, 
         numero_naissance, 
         annee_naissance, 
         TYPE, 
         prenom_fr, 
         nom_fr, 
         prenom_ar, 
         nom_ar, 
         date_naissance_equivalent, 
         date_redaction_equivalent
        FROM registres
        ORDER BY annee_naissance, numero_naissance
        LIMIT 20010 , 30

这就是结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32195051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档