我有如下表的MySQL不使用索引
CREATE TABLE `Config` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`type_id` mediumint(9) DEFAULT NULL,
`content_id` mediumint(9) DEFAULT NULL,
`menu_id` int(11) DEFAULT NULL,
`field` varchar(50) NOT NULL DEFAULT '',
`value` text NOT NULL,
PRIMARY KEY (`id`),
KEY `menu_id` (`menu_id`) USING BTREE,
KEY `type_id` (`type_id`,`content_id`,`menu_id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1;
它充满了大约80万行的测试数据。每当我运行下面的查询需要花费约0.4秒即可完成:
SELECT id, content_id, menu_id, field, `value`
FROM Config
WHERE type_id = ?
AND content_id = ?
的解释告诉我,MySQL是做一个全表,而不是使用索引:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Config ALL 792674 Using where
可有人请解释什么我在这里做错了?该指数如何在这里使用?有时候,查询有额外的条件AND menu_id = ?
,这也应该从中受益。
这似乎也是这种情况 - 有太多的行具有相同的值,所以MySQL决定表扫描在这里会更好。感谢提示! – acme 2011-02-02 13:22:11