2012-07-31 4 views
26

Ich habe eine MySQL-Abfrage (läuft MySQL 5.0.88), die ich versuche zu beschleunigen. Die zugrunde liegende Tabelle enthält mehrere Indizes, und für die betreffende Abfrage wird der falsche Index verwendet (i_active - 16.000 Zeilen, vs. i_iln - 7 Zeilen).Wie kann ich den Index angeben, um ihn in einer MySQL Select-Abfrage zu verwenden?

Ich bin nicht sehr erfahren mit MySQL, aber es gibt einen use index Hinweis, der mySQL zwingen kann, einen bestimmten Index zu verwenden. Ich versuche es so:

SELECT art.firma USE INDEX (i_iln) 
... 

, aber dies erzeugt einen MySQL-Fehler.

Frage:
Kann mir jemand sagen, was ich falsch mache? (. Außer 5.0.88 laufen, die ich nicht ändern kann)

+2

Für was es wert ist, erzwingt USE INDEX die Verwendung des benannten Index nicht. Es bedeutet nur "nicht in Betracht ziehen, einen * anderen * Index zu verwenden." Der von Ihnen angegebene Index ist möglicherweise für die Abfrage irrelevant. In diesem Fall wird MySQL ihn weiterhin nicht verwenden. –

Antwort

34

Sie verfehlten die FROM table

Correct SQL sein sollte:

SELECT art.firma FROM your_table USE INDEX (i_iln) WHERE ....

+7

ah ... 2100ms zu 0ms. Cool! – frequent

0

Wählen Sie Coloumn1, Coloumn2, Coloumn .... VONTABLE_NAMEUSE INDEX (index_name) WHERE Coloumn = "Bedingung";

Wenn Sie den richtigen Index haben, brauchen Sie nicht index(). Ihre Abfrage Automic wählen Sie richtigen Index.Wenn Ihre Abfrage langsam nach der Verwendung von Index thn überprüfen Sie Ihren Index, etwas falsch im Index. danke im Voraus.Code hier eingeben

+0

Ihre Antwort würde von einigen Bearbeitungen in Richtung Lesbarkeit, etwas Formatierung und etwas Löschen von Textfragmenten profitieren, die wie ungenutzte Template-Platzhalter aussehen. – Yunnosch

+0

Willkommen bei SO. Bitte lesen Sie [how-to-answer] (http://stackoverflow.com/help/how-to-answer) und folgen Sie den Richtlinien, um eine qualitativ hochwertige Antwort zu geben. – thewaywewere