Seitenanfang

mySQL EXPLAIN: Select tables optimized away

Dieser Post wurde aus meiner alten WordPress-Installation importiert. Sollte es Darstellungsprobleme, falsche Links oder fehlende Bilder geben, bitte einfach hier einen Kommentar hinterlassen. Danke.


Eines habe ich in den letzten Jahren, in denen ich jobbedingt zwangsweise mySQL-Anwender wurde, gelernt: mySQL ist immer für eine Überraschung gut und man sollte nichts, aber auch rein gar nichts "annehmen" oder "voraussetzen", schon gar kein "das ist ja logisch, das wird bestimmt so sein".

Nur diese - schmerzlich erlernte - Erkenntnis brachte mich dazu, ein so einfaches Query wie das Folgende mittels EXPLAIN zu untersuchen, zumal ich vorhabe, es einige tausend Mal in einer Schleife auszuführen (mit viel sonstiger Logik dazwischen, so dass jeder Aufruf tatsächlich ein anderes Ergebnis bringen kann):

EXPLAIN SELECT MAX(id) FROM DATA_TABLE

Vermutet hatte ich, dass der Primary-Key-Index dafür benutzt wird, um diese Frage zu beantworten, doch mySQL macht es sich noch einfacher:

id:	1select_type:	SIMPLEtable:	type:	possible_keys:	key:	key_len:	ref:	rows:	Extra:	Select tables optimized away
Die Erklärung findet sich in der mySQL-Doku:
Select tables optimized away

The query contained only aggregate functions (MIN(), MAX()) that were all resolved using an index, or COUNT(*) for MyISAM, and no GROUP BY clause. The optimizer determined that only one row should be returned.

mySQL erkennt die Einfachheit dieser Anfrage und optimiert sie weg. Übrig bleibt ein Indexzugriff, der quasi keine Nennenswerte Datenbanklast erzeugen sollte - es sei denn, die Tabelle oder das information_schema ist gerade gelocked, in diesem Fall kann auch ein so simples Query zum Stillstand führen.
 

Noch keine Kommentare. Schreib was dazu

Schreib was dazu

Die folgenden HTML-Tags sind erlaubt:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>