我想知道为什么以下查询在我解析它时不使用索引。
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
答案 0 :(得分:0)
我怀疑问题是类型转换问题。这可能会混淆MySQL和索引。试试这个:
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`
尽可能小心保持数字类型与字符类型分开。