MySQL里面+组+订单; filesort而不使用索引

时间:2013-01-15 15:07:32

标签: mysql query-optimization

我想知道为什么以下查询在我解析它时不使用索引。

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  

1 个答案:

答案 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`

尽可能小心保持数字类型与字符类型分开。