Pit: mysql: Slowquery untersuchen

Beitrag lesen

Hallo Rolf,

Wenn Du einen Index konkret für die Optimierung dieses Zugriffs erzeugen willst, muss er alle 3 Spalten enthalten. Dann kann MYSQL über einen reinen Index-Seek direkt die Record-ID der richtigen Row finden. Bzw. wenn es mehrere gibt, die Record-ID einer richtigen Row. EIne reicht Dir ja.

Ok, das wußt ich nicht. Danke.

Oder ist die Kombination (B_Art, Art, ID) UNIQUE? Wenn ja, könntest Du den Index auch als UNIQUE anlegen, er erzeugt dann einen INSERT Fehler, wenn Du irrtümlich eine NON-UNIQUE Kombination erzeugst.

Nein, ich habe nochmal darüber nachgedacht. Die Kombi ist nicht UNIQUE. Daher auch kein UNIQUE Index und daher geht auch das ORDER BY in Ordnung. Ich hatte im Eingangspost da einen Fehler in der Beispielquery.

In welcher Reihenfolge die 3 Spalten im Index stehen, hängt davon ab, ob der Index auch noch für andere Abfragen genutzt werden könnte. Wenn diese anderen Abfragen nur einen Teil dieser 3 Spalten nutzen, dann muss diese Teilmenge im Index nach vorn.

Soweit ich das in Erinnerung habe, könnte ggf. mal nach B_Art gesucht werden. Die anderen Beiden Spalten machen aber nur in Kombination überhaupt Sinn. Deshalb nehme ich B_Art an den Anfang und packe die anderen beiden dazu.

Explain meint dazu:

id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
1 	SIMPLE 	      table 	ref 	kombi 	        kombi 	10 	const,const,const 	1 	Using index condition; Using where; Using filesort

Ist das besser?

Pit