慢查询mysql没有找到正确的索引

时间:2014-06-05 19:31:49

标签: mysql mysql-slow-query-log

我有一个“慢查询”,并没有找到“正确”的索引来避免查询速度慢。

查询是:

SELECT c.uid FROM tx_gwcalendar_competition c,tx_gestionprofildb_discipline d WHERE c.hidden=0 and c.deleted=0 and c.discipline=d.uid and d.usergroup=19 LIMIT 1;

我的表是:

CREATE TABLE IF NOT EXISTS `tx_gwcalendar_competition` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL DEFAULT '0',
  `tstamp` int(11) NOT NULL DEFAULT '0',
  `crdate` int(11) NOT NULL DEFAULT '0',
  `cruser_id` int(11) NOT NULL DEFAULT '0',
  `sys_language_uid` int(11) NOT NULL DEFAULT '0',
  `l10n_parent` int(11) NOT NULL DEFAULT '0',
  `l10n_diffsource` mediumtext,
  `deleted` tinyint(4) NOT NULL DEFAULT '0',
  `hidden` tinyint(4) NOT NULL DEFAULT '0',
  `title` tinytext,
  `discipline` int(11) NOT NULL DEFAULT '0',
  `dept` tinytext,
  `ville` tinytext,
  `distance` tinytext,
  `date` int(11) NOT NULL DEFAULT '0',
  `description` text,
  PRIMARY KEY (`uid`),
  KEY `parent` (`pid`),
  KEY `deleted` (`deleted`,`hidden`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8659 ;

CREATE TABLE IF NOT EXISTS `tx_gestionprofildb_discipline` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL DEFAULT '0',
  `tstamp` int(11) NOT NULL DEFAULT '0',
  `crdate` int(11) NOT NULL DEFAULT '0',
  `cruser_id` int(11) NOT NULL DEFAULT '0',
  `deleted` tinyint(4) NOT NULL DEFAULT '0',
  `hidden` tinyint(4) NOT NULL DEFAULT '0',
  `libelle` tinytext,
  `description` text,
  `usergroup` int(11) NOT NULL DEFAULT '0',
  `sportup_tag` tinytext,
  `form_mutation` text,
  `documents` text,
  `mutation` tinyint(3) NOT NULL DEFAULT '0',
  `nolicence` tinyint(3) NOT NULL DEFAULT '0',
  `agendahtml` text,
  `objectifhtml` text,
  `havestat` tinyint(3) NOT NULL DEFAULT '0',
  `description_conseil` text,
  `frais_admin` tinytext,
  PRIMARY KEY (`uid`),
  KEY `parent` (`pid`),
  KEY `deleted_hidden_libelle` (`deleted`,`hidden`,`libelle`(20))
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=53 ;

当我运行解释时,我得到了:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  c   ALL deleted NULL    NULL    NULL    8658    Using where
1   SIMPLE  d   eq_ref  PRIMARY PRIMARY 4   tbs888dbnew.c.discipline    1   Using where

我尝试在删除/隐藏上添加一个索引,但现在改为我仍然使用第一行的8658 key_len,如果我没有放任何索引......我对mysql的了解有限,所以我没有'我知道该做什么(如果可能......)。

所以,如果有人有任何建议,请随意。

非常感谢你

1 个答案:

答案 0 :(得分:0)

尝试更改deleted索引定义中hiddendeleted_hidden_libelle的顺序,或更改它们在查询的where子句中出现的顺序。

它们应该以与where子句中出现的顺序相同的顺序出现在索引中。

此外,您应该为正在使用的字段添加索引来加入表格:

KEY `discipline` (`discipline`)