2016-07-05 5 views
-1

wenn ich möchte wissen, ob mysql die Indizierung verwendet ich diese SQL verwenden kann, um zu überprüfen, wie viele Zeilen für die SQL gescannt durch die Zeilen Spalte Überprüfung zurückgegeben:ist eine Möglichkeit, den Namen der Indizierung zu kennen, die mysql verwendet, wenn ich eine Abfrage einreiche?

EXPLAIN SELECT * FROM table_name1 WHERE `length` = 71; 

aber ich frage mich, ob überhaupt Zeigen Sie mir direkt, welche Indizierung mysql für den Fortschritt verwendet. Ich denke, es wird besser sein System sagen Sie mir den Namen der Indizierung.

Nehmen wir ein Beispiel:

CREATE TABLE `tb1` (
`id` int(3) unsigned NOT NULL AUTO_INCREMENT, 
`num` int(11) NOT NULL, 
`length` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`), 
KEY `length` (`length`) USING BTREE, 
KEY `num_length` (`num`,`length`) USING BTREE 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; 

Die Abfrage erstellen eine Tabelle namens „tb1“ und einen Index für „Länge“ und einem Index für „Länge“ und „num“ erstellen;

Ich möchte wissen, ob der "Länge" Index richtig funktioniert.

; enter image description here

das Ergebnis scheint nur zeigen 1666 Zeilen gescannt aber didn, t sagen mir, welche Index mysql für die Abfrage verwendet.

was ich wissen möchte, ist, wie man den Indexnamen, den mysql verwendet, wenn eine Abfrage ausgeführt wird.

+2

Das 'EXPLAIN' sagt Ihnen, welche Indizes es verwendet. Das ist der ** einzige ** Weg. Es ist unklar, was Sie erreichen möchten und welche Art von Optimierung Sie anstreben. Erweitern Sie Ihre Frage und erklären Sie das ** eigentliche Problem **, das Sie haben. – Mjh

+0

@mjh danke. Ich habe die Frage erweitert und ein Beispiel hinzugefügt. Vielleicht scheint es jetzt klarer zu sein. – Tim

Antwort

1

Die EXPLAIN sagt key = length. Also das ist wahrscheinlich der Index wird verwendet. Ich sage wahrscheinlich, weil die Abfrage möglicherweise anders als die EXPLAIN funktioniert.

Etwas anderes ist verwirrend: AUTO_INCREMENT=2 bedeutet, dass Sie nur sehr wenige Zeilen in der Tabelle haben. Aber Rows=1666 bedeutet, dass es viele Zeilen gibt. Welches ist richtig?

Wenn nur zwei Zeilen vorhanden sind, ist es unwahrscheinlich, dass ein Index verwendet wird. Ein Tabellenscan ist wahrscheinlich schneller.

In MariaDB 10.0 (und neueren Versionen von MySQL?), Gibt es eine Möglichkeit für EXPLAINing eine ausgeführt Abfrage. Diese Abfrage wird jedoch wahrscheinlich zu schnell ausgeführt, um Ihnen dies zu ermöglichen. Auch der Slowlog wird die Erklärung haben - verwenden Sie long_query_time=0.

Wie zu wissen, "wenn Sie die Abfrage senden", gibt es keine Möglichkeit. Sie können nur eine sehr wahrscheinliche Antwort erhalten, indem Sie zuerst EXPLAIN tun.

0

Sie können Indizes wie folgt überprüfen:

SHOW INDEX FROM mytable FROM mydb; 
SHOW INDEX FROM mydb.mytable; 
+0

danke.Ich denke, es wird alle Index aus der Tabelle.aber ich möchte nur wissen, welche Indizes mysql bei der Verarbeitung verwendet – Tim