6

私は次の表を持っています:

CREATE TABLE 'tableA'(
 `col1` int(11) NOT NULL AUTO_INCREMENT,
  `col2` varchar(20) NOT NULL,
  `col3` int(11) NOT NULL,
  `col4` varchar(200) NOT NULL,
  `col5` varchar(15) NOT NULL,
  `col6` datetime NOT NULL,
  PRIMARY KEY (`col1`),
  UNIQUE KEY `col2,col3` (`col2`,`col3`),
  KEY `col6` (`col6`)
) ENGINE=InnoDB AUTO_INCREMENT=1881208 DEFAULT CHARSET=utf8

日時列であるcol6にインデックスがあります。テーブルにはほぼ200万行あり、日付の範囲は2007年1月1日から2012年11月27日までです。

次のコマンドを実行すると、インデックスは使用されません。

EXPLAIN SELECT * FROM tableA ORDER BY col6 ASC


+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows    | Extra          |
+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+
|  1 | SIMPLE      | tableA | ALL  | NULL          | NULL | NULL    | NULL | 1933765 | Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+---------+----------------+

日時フィールドを整数に変換し、日時をUNIXタイムスタンプに変換してみました。ただし、それでも私のインデックスは使用されません。私は何が欠けていますか?オプティマイザがインデックスを使用するのではなく、多くの行(この場合は1,933,765行)を並べ替えることを主張するのはなぜですか?

4

1 に答える 1

4

結果セットを絞り込むためにインデックスに基づいて何も選択していないため、インデックスを使用すると、プライマリテーブルの各行ごとにポイントルックアップを介してルックアップするための追加の作業が発生するだけです。

于 2012-11-28T02:53:09.880 に答える