2014-06-05 102 views
0

我有一個「慢速查詢」,沒有找到「正確的」索引來避免緩慢的查詢。緩慢的查詢mysql沒有找到正確的索引

查詢是:

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是有限的,所以我沒有知道該怎麼做(如果可能......)。

所以,如果有人有任何建議,請隨意。

非常感謝你

回答

0

嘗試改變的deletedhidden的順序,你deleted_hidden_libelle索引定義,或更改您的查詢的WHERE子句中出現的順序。

它們應以它們出現在where子句中的順序出現在索引中。

此外,你應該增加一個索引您正在使用連接表的字段:

KEY `discipline` (`discipline`) 
+0

我只是嘗試,但沒有什麼變化...... STIL相同的結果。 謝謝 – Mitchum

+0

@Mitchum看到我的編輯 – Eran

+0

嗨,我試圖添加紀律關鍵,但沒有任何改變......我迷路了。謝謝 – Mitchum