Vinzenz Mai: Grösse einer Abfrage

Beitrag lesen

Hallo

weiss jemand ob es eine Grössenbegrenzung bei MySQL Abfragen gibt,

kein prinzipielles, dafür sind Datenbanken da.

d.h. gibt es irgendwie Probleme wenn man ein ziemlich grosses SQL Statement | z.b. SELECT * FROM user WHERE id in (1,2,3,4,5,6,..........10000001,10000002 etc.)

Es müssen natürlich _alle_ Daten des Resultats an den Aufrufer übermittelt werden, deswegen ist es sinnvoll, nur _die_ Daten abzufragen, die man wirklich benötigt. Das ist einer der Gründe, warum es meist sinnvoll ist, auf SELECT * zu verzichten und statt dessen mit SELECT spaltenliste FROM zu arbeiten.

Ganz besonders gilt dies in dem Fall, dass der Aufrufer

z.b. per PHP absetzt.

Begrenzungen für Speicherverbrauch aufweist. Ein weiteres PHP-Problem könnte die Skriptlaufzeit ausmachen. Auch dies ist _kein_ Problem des Datenbankmanagementsystems (DBMS). Diese sind dafür ausgelegt, mit großen Datenmengen umzugehen. Ob Dein Statement in dieser Form sinnvoll ist oder durch ein günstigeres ersetzt werden sollte, das kannst nur Du selbst wissen.

Von der Beispielzeile ausgehend würde sich eine Umformulierung zu

SELECT  
  benötigte,  
  spalten  
FROM user  
WHERE id BETWEEN 1 AND obere_grenze

anbieten. Dieses Statement ist kürzer, somit schneller an die DB durchgereicht und das Statement dürfte sich von der DB schneller auswerten lassen. Mehr dazu könnte Dir EXPLAIN (siehe MySQL-Handbuch) sagen.

Wenn Du Lücken berücksichtigen musst, dann funktioniert das von mir angegebene Statement natürlich nicht wie gewünscht, das geht allerdings aus Deinem Beispiel auch nicht hervor. In vielen Fällen hilft es, wenn die Abarbeitung Deines Auswahlkriteriums von einem Index beschleunigt werden kann.

Freundliche Grüße

Vinzenz