2016-04-11 9 views
0

Ich benutze MySQL und InnoDB. Angenommen , dass ich die folgende Abfrage haben:Was ist der beste Index für INNER JOINs mit einer WHERE- und einer ORDER BY-Klausel?

SELECT id FROM 
Foo 
INNER JOIN 
Bar 
ON Foo.id = Bar.fooId 
WHERE Foo.column1 = N 
ORDER BY Foo.column2 DESC LIMIT 100 

Hier Foo.id ist der Primärschlüssel und Bar.fooId ist der FK.

Was ist der beste Index, den ich Foo und Bar Tabellen hinzufügen sollte?

Derzeit habe ich einen Index auf (Foo.column1, Foo.column2) in Foo Tabelle. Sollte ich auch diesen zusammengesetzten Index Foo.id hinzufügen? Was ist der Auftrag?

Ich konnte keinen formalen Hinweis finden, um dieses Thema zu behandeln.

+0

Hoffe, dass Foo.id Primärschlüssel & Bar.fooId ist Fremdschlüssel. Recht? –

+0

@DipanwitaKundu Ja. Bearbeitet. – Mowji

+0

KEINE Notwendigkeit, foo.id als zusammengesetzten Index hinzuzufügen. Es ist ausreichend. –

Antwort

0

(Foo.column1, Foo.column2) sollte für Foo ausreichen, müssen Sie die PK nicht zum Ende hinzufügen, da innodb immer die PK am Ende jedes Index hat. Bar muss einen Index auf fooId haben.

Führen Sie explain <query> aus, um zu überprüfen, was MySQL tut.

Für Foo sollten Sie Typ ref, using index im Extra ohne using filesort und 100 Reihen erhalten.

Bar sollte in der Extra Typ ref und using index haben.