3つの列に基づく複合インデックスがあります。そのうちの2つはクエリで制約され、3つ目は句による順序ですが、mysqlは並べ替えにインデックスを使用しません。
public_private='public'およびapproveled='yes'のビデオからselect*をnumber_of_viewsdescで説明します。 + ---- + ------------- + -------- + ------ + -------------- ------------------ + ------ + --------- + ------ + ------- -+ ----------------------------- + | id | select_type | テーブル| タイプ| possible_keys | キー| key_len | ref | 行| エクストラ| + ---- + ------------- + -------- + ------ + -------------- ------------------ + ------ + --------- + ------ + ------- -+ ----------------------------- + | 1 | シンプル| ビデオ| すべて| 承認済み、承認済み_3、承認済み_2 | NULL | NULL | NULL | 1476818 | whereを使用する; filesortの使用| + ---- + ------------- + -------- + ------ + -------------- ------------------ + ------ + --------- + ------ + ------- -+ ----------------------------- +
テーブルの構造は次のとおりです。
CREATE TABLE `videos` (
`indexer` int(9) NOT NULL auto_increment,
`user_id` int(9) default NULL,
`public_private` varchar(24) default NULL,
`approved` varchar(24) default NULL,
`number_of_views` int(9) default NULL,
PRIMARY KEY (`indexer`),
KEY `approved` (`approved`,`user_id`),
KEY `approved_3` (`approved`,`public_private`,`indexer`),
KEY `approved_2` (`approved`,`public_private`,`number_of_views`),
) ENGINE=MyISAM AUTO_INCREMENT=1969091 DEFAULT CHARSET=utf8 |
mysqlが結果をソートするためにインデックスを使用するように強制するにはどうすればよいですか?