2
我想创建一个选择查询,但mysql总是使用“使用filesort”额外时,我使用解释查询。不能避免'使用filesort'在一个非常简单的查询与订单
我试着用最简单的查询,但问题并没有消失。 我的表“编法”的结构是:
CREATE TABLE IF NOT EXISTS `Partidas` (
`IdUsuario` int(11) NOT NULL,
`IdPartida` int(11) NOT NULL,
`TipoPartida` tinyint(4) NOT NULL,
`Facil` tinyint(1) NOT NULL DEFAULT '0',
`Normal` tinyint(1) NOT NULL DEFAULT '0',
`Dificil` tinyint(1) NOT NULL DEFAULT '0',
`FchPartida` date NOT NULL,
`PuntosPartida` mediumint(9) NOT NULL,
`IdPartidaTemp` bigint(20) NOT NULL,
`ComplPers` tinyint(1) NOT NULL,
`SoloMulti` tinyint(2) NOT NULL,
PRIMARY KEY (`IdUsuario`,`IdPartida`),
KEY `IX_PARTIDAS_RECORDS` (`TipoPartida`,`FchPartida`,`PuntosPartida`),
KEY `IX_PARTIDAS_ORDEN2` (`FchPartida`),
KEY `IX_PARTIDAS_COMPLPERS` (`ComplPers`,`FchPartida`,`PuntosPartida`),
KEY `IX_PARTIDAS_SOLOMULTI` (`SoloMulti`,`FchPartida`,`PuntosPartida`),
KEY `IX_PARTIDAS_DIFICULTAD` (`Facil`,`Normal`,`Dificil`,`SoloMulti`,`FchPartida`,`PuntosPartida`),
KEY `IX_PARTIDAS_COMPMULTI` (`ComplPers`,`SoloMulti`,`FchPartida`,`PuntosPartida`),
KEY `IX_PARTIDAS_COMPLPERS_SIMPLE` (`ComplPers`,`PuntosPartida`),
KEY `IX_PARTIDAS_SOLOMULTI_SIMPLE` (`SoloMulti`,`PuntosPartida`),
KEY `IX_PARTIDAS_FECHA` (`FchPartida`),
KEY `IX_PARTIDAS_PUNTOS` (`PuntosPartida`),
KEY `PRUEBA_PARTIDAS` (`PuntosPartida`,`TipoPartida`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
表有大约1000-5000行(还真有点数据),但总是用文件排序使用。我使用的测试查询是:
explain select *
from Partidas
order by PuntosPartida
limit 0, 50;
,其结果是:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | SIMPLE | Partidas | ALL | NULL | NULL | NULL |NULL | 1041 | Using filesort |
,但如果在查询我更改限制,例如,限制0,5;那么结果也会发生变化
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | SIMPLE | Partidas | index | NULL | IX_PARTIDAS_PUNTOS | 3 |NULL | 5 | |
在MySQL配置,缓冲区的变量和排序是:
-myisam sort buffer size: 2MB
-sort buffer size: 2MB
-key buffer size: 1GB
,但我试图改变这些值(增加,直到8MB),结果是一样的
谢谢大家帮忙
没有“使用文件排序”中的解释结果也read more here你能向我们展示了 – 2013-03-11 13:29:02
你可以用'USE INDEX尝试(IX_PARTIDAS_PUNTOS )'如果你确定这个查询的索引会更快。或者尝试运行'ANALYZE TABLE Partidas'来重新计算索引统计信息。 http://dev.mysql.com/doc/refman/5.1/en/index-hints.html – Marki555 2013-03-11 13:39:23
这个具体的查询速度非常快,但我很担心,因为我在其他大于此的表中存在相同的问题,并且他们很慢,我认为问题是使用filesort和临时使用,并且我想首先处理最简单的查询 – Juamba 2013-03-11 13:44:44