2

EXPLAIN するときに、次のクエリがインデックスを使用しないのはなぜだろうか。

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  
4

1 に答える 1

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`

可能な場合は、数値型を文字型から分離するように注意してください。

于 2013-01-15T15:59:04.163 に答える