2
我想知道为什么下面的查询不使用索引时,我解释它。MySQL在哪里+组+订单; filesort和不使用索引
EXPLAIN SELECT
`t`.`id`, `t`.`omschrijving_kort`, `t`.`oplos_tijd_issue`
FROM `incident` `t`
LEFT OUTER JOIN `plaats` `plaatsen` ON (`plaatsen`.`incident_id`=`t`.`id`)
WHERE
t.type='2' AND t.status='1'
GROUP BY t.id
ORDER BY `t`.`oplos_tijd_issue`
我的表:
CREATE TABLE `incident` (
`id` int(10) unsigned NOT NULL auto_increment,
`omschrijving_kort` varchar(40) NOT NULL,
`sla_type` tinyint(1) unsigned NOT NULL,
`prioriteit` tinyint(1) unsigned NOT NULL,
`laatste_wijziging` timestamp NULL default NULL,
`aanmaak_tijd` timestamp NULL default NULL,
`start_tijd_issue` timestamp NULL default NULL,
`oplos_tijd_issue` timestamp NULL default NULL,
`impact` int(11) unsigned default NULL,
`template_id` int(10) unsigned default NULL,
`type` tinyint(1) unsigned NOT NULL default '1',
`subtype` tinyint(1) NOT NULL default '1',
`status` tinyint(1) unsigned NOT NULL default '1',
`regio_id` smallint(5) unsigned default NULL,
PRIMARY KEY (`id`),
KEY `FK_template` (`template_id`),
KEY `start_tijd_issue` (`start_tijd_issue`),
KEY `id_startTijdIssue` (`id`,`start_tijd_issue`),
KEY `id_oplosTijdIssue` (`id`,`oplos_tijd_issue`),
KEY `id_subtype_status` (`id`,`subtype`,`status`),
KEY `id` (`id`,`afsluiting_tijd`),
KEY `id_2` (`id`,`oplos_tijd_issue`,`status`),
KEY `FK_regios` (`regio_id`),
KEY `id_3` (`id`,`status`),
KEY `id_4` (`id`,`start_tijd_issue`,`oplos_tijd_issue`,`type`,`status`),
KEY `id_5` (`id`,`prioriteit`),
KEY `id_6` (`id`,`type`,`status`,`regio_id`),
KEY `id_7` (`id`,`oplos_tijd_issue`,`type`,`status`,`regio_id`),
KEY `id_8` (`id`,`regio_id`),
KEY `oplos_tijd_issue_2` (`oplos_tijd_issue`,`type`,`status`),
KEY `id_9` (`oplos_tijd_issue`,`type`,`status`,`id`),
KEY `id_10` (`id`,`type`,`status`),
KEY `type` (`type`,`status`,`id`,`oplos_tijd_issue`),
KEY `oplos_tijd_issue` (`type`,`status`,`oplos_tijd_issue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我曾尝试添加索引到我的表...也许太多了!
从我抬头看,一个索引(type, status, oplos_tijd_issue)
应该足够吗?
EXPLAIN
告诉我:
possible keys: type, oplos_tijd_issue
key: type
ref: const, const
Extra: Using where; Using temporary; Using filesort
除了过度索引,MySQL的索引基数可能太低而无法使用索引,因此它会选择遍历整个数据集。即使您设置了索引,也并不意味着它会被使用或者它是最佳索引。索引不是“魔术”,你不能只扔大量的索引,并希望一切都很快。 –
同意@ N.B .;索引太多。 – Kermit