2012-03-24 10 views
1

Ich habe eine AbfrageMysql Indizierung und tritt

SELECT `a`.restid, `b`.`name` AS execname, `c`.`dept_name` 
FROM `tk_ticket` AS a 
INNER JOIN `tk_acp_users` AS b ON `a`.`exec_id` = `b`.`id` 
INNER JOIN `tk_ticket_dept` AS c ON `a`.`dept_id` = `c`.`dept_id` 
WHERE `a`.`dept_id` IN(9,11) 
AND `a`.`status` = 0 
ORDER BY `a`.`date` DESC, `a`.`dept_id` 

Ausgabe Erklären

1 SIMPLE a ALL exec_id_2 5391 Using where; Using filesort 
1 SIMPLE b eq_ref PRIMARY PRIMARY 2 tk_new_db.a.exec_id 1 
1 SIMPLE c eq_ref PRIMARY PRIMARY 1 tk_new_db.a.dept_id 1 Using where 

Wenn ich einen Lauf erkläre ich eine vollständige Tabellen-Scan für die Tabelle erhalten ein, wie verhindere ich das von i geschieht einen Schlüssel hinzugefügt (exec_id, dept_id, status), aber dieser Index wird nicht berücksichtigt.

+1

Was Primärschlüssel? –

+0

Können Sie die Ausgabe von EXPLAIN-Plan veröffentlichen? –

+0

Ich denke, "ORDER BY' a'.date' "verursacht den vollständigen Tabellenscan. Keine Zeit, es zu testen, also ist das nur eine blinde Vermutung, Entschuldigung. – Timur

Antwort

1

Ich glaube nicht, dass MySQL den Index (exec_id, dept_id, status) hier verwenden kann, da es in Ihrer WHERE-Klausel keine exec_id gibt. Versuchen Sie stattdessen, einen Index für (dept_id, status) hinzuzufügen und vielleicht einen separaten für (exec_id) für den JOIN anzulegen. Siehe http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

0

Da Ihre WHERE-Klausel dept_id und status, aber nicht exec_id verwendet, wird der von Ihnen erstellte Index nicht verwendet.

Dies ist, wenn die Tabelle einen mehrspaltigen Index hat, kann jedes linke Präfix des Index vom Optimierer verwendet werden, um Zeilen zu finden. Wenn Sie beispielsweise einen dreispaltigen Index für (Spalte1, Spalte2, Spalte3) haben, haben Sie Suchfunktionen für (Spalte1), (Spalte1, Spalte2) und (Spalte1, Spalte2, Spalte3) indiziert.

MySQL keinen Index verwenden, wenn die Spalten

Sie lesen konnten mehr keinen linken Präfix des Index bilden, hier: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html