У меня есть очень простой запрос:Мой простой MySql запрос не использует индексировать
SELECT comments.*
FROM comments
WHERE comments.imageid=46
И это мой стол:
CREATE TABLE IF NOT EXISTS `comments` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`imageid` int(10) unsigned NOT NULL DEFAULT '0',
`uid` bigint(20) unsigned NOT NULL DEFAULT '0',
`content` text CHARACTER SET utf8,
`adate` datetime DEFAULT NULL,
`ip` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ids` (`imageid`) USING BTREE,
KEY `dt` (`adate`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
Но MySql не может использовать индекс на этом простом запросе , вот результат объяснения:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE comments ALL ids NULL NULL NULL 4 75.00 Using where
Пока я меняю запрос на это, Mysql может использовать индекс. Зачем? :
SELECT comments.id
FROM comments
WHERE comments.imageid=46
вот объясняю:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE comments ref ids ids 4 const 4 100.00 Using index
Это не * «Но MySql ** не может использовать индекс» *. Это: «Но MySql ** не будет использовать индекс». «Возможные_keys = ids» и «key = NULL» предполагают, что использование индекса было проверено оптимизатором и отклонено. Считалось, что сканирование полного стола было быстрее - и, вероятно, это в вашем случае. –