【发布时间】:2011-06-19 20:26:23
【问题描述】:
我有下表
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;
它包含大约 800k 行测试数据。每当我运行以下查询时,大约需要 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 = ?,这也应该从中受益。
【问题讨论】: