2011-09-01 61 views
4

我見過很多類似的問題,但是我沒有看到適用於我的解決方案。或者,也許我正在密集。 :)希望有人能幫助我。MYSQL在簡單查詢中使用ORDER BY索引列時使用filesort

我有如下表:

CREATE TABLE `table_name` (
    `value1` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `value2` varchar(50) NOT NULL, 
    `value3` tinytext, 
    `value4` tinytext, 
    `value5` tinytext, 
    `value6` char(3) DEFAULT NULL, 
    `value7` char(3) DEFAULT NULL, 
    PRIMARY KEY (`value1`), 
    KEY value2_index ('value2') 
) ENGINE=MyISAM AUTO_INCREMENT=46 DEFAULT CHARSET=latin1; 

爲了驗證我的指標進行設置,這是SHOW INDEX結果:

+--------------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table  | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+--------------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| table_name |   0 | PRIMARY  |   1 | value1  | A   |   43 |  NULL | NULL |  | BTREE  |   | 
| table_name |   1 | value2_index |   1 | value2  | A   |  NULL |  NULL | NULL | YES | BTREE  |   | 
+--------------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
2 rows in set (0.00 sec) 

當我運行此查詢:

SELECT value2, value6 
FROM table_name 
WHERE value7 = 'Yes' 
ORDER BY value2; 

我認爲通過在value2上添加一個索引,它會停止使用filesort的查詢。然而,EXPLAIN顯示方式不同:

+----+-------------+--------------+------+---------------+------+---------+------+------+-----------------------------+ 
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra      | 
+----+-------------+--------------+------+---------------+------+---------+------+------+-----------------------------+ 
| 1 | SIMPLE  | table_name | ALL | NULL   | NULL | NULL | NULL | 43 | Using where; Using filesort | 
+----+-------------+--------------+------+---------------+------+---------+------+------+-----------------------------+ 
1 row in set (0.00 sec) 

我在做什麼錯?

謝謝!

回答

6

查詢首先需要查找值爲value7 ='是'的行,這意味着您的索引必須包含value7作爲第一列,才能使用。對於那些匹配的行,它需要按value2進行排序。所以這個查詢需要一個多列索引(value7,value2)。

您可以在MySQL docs中查看更多關於索引的信息。

相關問題