Ich habe einen zusammengesetzten Index auf der Grundlage von 3 Spalten, von denen zwei in meiner Abfrage eingeschränkt sind und die 3. ist in Reihenfolge durch Klausel noch mysql nicht Index für die Sortierung verwenden.
explain select \* from videos where public\_private='public' and approved='yes' order by number\_of\_views desc;
+----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+
| id | select\_type | table | type | possible\_keys | key | key\_len | ref | rows | Extra |
+----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+
| 1 | SIMPLE | videos | ALL | approved,approved\_3,approved\_2 | NULL | NULL | NULL | 1476818 | Using where; Using filesort |
+----+-------------+--------+------+--------------------------------+------+---------+------+---------+-----------------------------+
Die Struktur der Tabelle ist wie folgt:
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 |
Was sollte ich tun, um mysql zu zwingen, Index für die Sortierung der Ergebnisse zu verwenden?