Lukas.: Frage zu mysql #1104

Beitrag lesen

Hi Rolf,

danke für Deine Antwort.

max_join_size gibt an, wieviele Zeilen ein JOIN produziert. Wenn Du 3 Tabellen joinst, und jede 1000 Rows hat, gibt das im ungünstigsten Fall eine max_join_size von einer Milliarde Rows. Welcher Wert in deine(m|n) Server(n?) eingestellt ist, kannst Du in phpMyAdmin finden, wenn Du auf die Server-Übersicht gehst und da den Reiter "Variablen" auswählst. Wenn da 1000 steht, ist es klar zu wenig, wenn da in etwa $$18\cdot10^{18}$$ steht, ist es klar zu viel (das wäre uint64.maxvalue).

Habe ich gestern schon nachgesehen und es ist auf ca. 200 Mio eingestellt, was ich auch schon sehr wenig finde, wenn man den mysql Defaultwert mal betrachtet.

Du solltest Dir deine Query anschauen und versuchen abzuschätzen, wie viele Rows auf Grund der Join-Bedingungen entstehen. Das kann Dir hier keiner abnehmen, weil wir dein Datenmodell und deine Inhalte nicht kennen.

Habe mir die Query gestern schon mit meinem Hoster gemeinsam angesehen, da gibts wenig dran zu rütteln.

Wenn MySQL dich auf diese Weise warnt, hat entweder jemand die MySQL Konfiguration geändert und die max_join_size reduziert, oder es wurde ein Index gedroppt, so dass statt eines Index-Seek oder Index-Scan nun ein Table-Scan durchgeführt werden muss. Vielleicht hast Du auch eine vermeintliche Kleinigkeit am Statement geändert, so dass nun kein Index-Scan mehr möglich ist.

Wie gesagt, die Konfiguration ist geändert, ich bin dem Problem jetzt über ein SET SQL_BIG_SELECTS=1 begegnet.

Was mich nur grundsätzlich wundert, ist, dass mysql die Warnung (bzw. den fehler) meldet, nahezu egal wieviele Rows in den betroffenen Tabellen stehen.

Also: meditiere über dein Statement - kannst es uns auch gern zeigen - und lass Dir vom SQL Server den Zugriffspfad erklären (EXPLAIN).

Gemacht…

L.