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