繁体   English   中英

为什么这个MySQL查询即使有索引也要花这么长时间进行排序?

[英]Why does this MySQL query take so long for sorting even though it has an index?

我不明白为什么以下查询需要这么长时间才能排序。 在概要分析中,即使排序行有索引,它也显示排序仍然需要很长时间。

MySQL服务器是一台专用计算机,基本上在当前的Debian稳定版本中仅运行MySQL,具有32 GB的物理RAM和一个不错的MySQL配置。 player (INNODB)当前具有约32,000,000个条目。 player索引:

gameplayergame, id, server (唯一)

id, server serverplayer id, server (索引)

date超过date (索引)<-这是我们将按照的排序

以下查询用于获取有关某个游戏的某个玩家的统计数据,从而获取有关该玩家,这些统计数据和实际游戏的信息:

set profiling = 1;

SELECT *
FROM `player` `gs`
INNER JOIN `playerstats` `gss` ON (`gss`.`player` = `gs`.`id`)
INNER JOIN `game` `g` ON (`g`.`id` = `gs`.`game`)
WHERE `gs`.`id` = :id
AND `gs`.`server` = :server
ORDER BY `gs`.`date` DESC
LIMIT 10;

show profile for query 1;

set profiling = 0;

这是表演资料的结果:

starting    0.000124
Waiting for query cache lock    0.000070
checking query cache for query  0.000090
checking permissions    0.000066
checking permissions    0.000058
checking permissions    0.000056
Opening tables  0.000074
System lock 0.000058
Waiting for query cache lock    0.000093
init    0.000071
optimizing  0.000054
statistics  0.000136
preparing   0.000073
executing   0.000044
Sorting result  0.201156 // <========================
Sending data    0.042253
end 0.000046
query end   0.000038
closing tables  0.000043
freeing items   0.000042
Waiting for query cache lock    0.000037
freeing items   0.000039
Waiting for query cache lock    0.000035
freeing items   0.000032
storing result in query cache   0.000031
logging slow query  0.000030
cleaning up 0.000031

如果我对MySQL的理解正确,那么应该对WHERE条件使用serverplayer索引,对排序使用date索引,对吗? 那么,当我有适当的索引可用时,为什么要花这么长时间?

还是我必须将列date添加到serverplayer索引中?

阅读此链接以获取详细信息: http : //dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html

在您的特定情况下,此条件不满足并且MySql不使用索引对行进行排序:

在某些情况下,MySQL仍然无法使用索引来解析ORDER BY,尽管它仍然使用索引来查找与WHERE子句匹配的行。 这些情况包括:
....
用于获取行的密钥与在ORDER BY使用的密钥不同:
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
......


但是,当创建关于列id + server + date的索引时,其中iddate是WHERE子句中用于选择行的列,而date是索引中的最后一列,上述条件不适用,MySql可以使用此索引对行进行排序并避免文件排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM