Moje proste zapytanie MySql nie używa indeksu
Mam bardzo proste zapytanie:
<code> SELECT comments.* FROM comments WHERE comments.imageid=46 </code>
A to jest mój stół:
<code>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 ; </code>
Ale MySql nie może używać indeksu dla tego prostego zapytania. oto wynik wyjaśnienia:
<code>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 </code>
podczas gdy zmieniam zapytanie na to, Mysql może używać indeksu. Czemu? :
<code> SELECT comments.id FROM comments WHERE comments.imageid=46 </code>
oto wyjaśnienie:
<code>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 </code>