Grösse einer Abfrage
Hegemann
- datenbank
0 Ilja0 Vinzenz Mai0 Hegemann
0 Sven Rautenberg0 Ilja0 Sven Rautenberg0 Ilja0 Sven Rautenberg0 Ilja
0
at
Hallo,
weiss jemand ob es eine Grössenbegrenzung bei MySQL Abfragen gibt, d.h. gibt es irgendwie Probleme wenn man ein ziemlich grosses SQL Statement z.b. per PHP absetzt.
z.b. SELECT * FROM user WHERE id in (1,2,3,4,5,6,..........10000001,10000002 etc.)
Viele Grüße
Hegemann
yo,
z.b. SELECT * FROM user WHERE id in (1,2,3,4,5,6,..........10000001,10000002 etc.)
bis her habe ich noch keine probleme bezüglich der größe bekommen, aber wenn du das genau wissen willst, schau mal ins handbuch.
einen tiüpp noch, solche bedingungen wie 1,2....6 kann man einfacher mit dem BETWEEN Operator zusammen fassen. das macht dann auch eventuell die query kleiner.
Ilja
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
Hallo,
danke für die Antworten.
Mit der Auflistung wollte ich nur demnonstrieren, dass es sich um ein ziemlich langes SQL Statement handelt. Mit Between wäre das natürlich besser gelöst, es handelt sich aber nicht um eine Zahlenreihe.
Mittlerweile habe ich noch einen Kollegen gefragt. Es gibt anscheinend doch eine Begrenzung des SQL Strings von höchstens 2 MB. Bei grösseren Statement gibt es anscheinend Probleme.
Kann das jemand bestätigen, da dass von uns nicht getestet wurde.
Viele Grüße
Hegemann
Hallo
Mit der Auflistung wollte ich nur demnonstrieren, dass es sich um ein ziemlich langes SQL Statement handelt. Mit Between wäre das natürlich besser gelöst, es handelt sich aber nicht um eine Zahlenreihe.
Mittlerweile habe ich noch einen Kollegen gefragt. Es gibt anscheinend doch eine Begrenzung des SQL Strings von höchstens 2 MB. Bei grösseren Statement gibt es anscheinend Probleme.
Ist das Dein Ernst?
Dein voller Ernst?
Wenn ja - und ich befürchte dies - überdenke Deine Vorgehensweise. Dieser mein Vorschlag ist ernst gemeint.
Wie ermittelst Du Deine Zahlenreihe?
Freundliche Grüße
Vinzenz
Hallo,
Wenn ja - und ich befürchte dies - überdenke Deine Vorgehensweise. Dieser mein Vorschlag ist ernst gemeint.
Wie ermittelst Du Deine Zahlenreihe?
Genau, insbesondere auf der Schiene würde ich mal weiterdenken: Schaffst du es, Ermittlung der Suchdaten und der gesuchten Daten in einer SQL-Abfrage durchzuführen, sei es Join, Subselect oder sonstwas? Ich kenn solch lange Suchstrings eigentlich nur von "Mach Abfrage 1, lies Ergebnisse, kombiniere auf String, mach Abfrage 2", aber das sollte man nach Möglichkeit vermeiden.
MfG
Rouven
Moin!
Richtig lesen hilft manchmal, in die richtige Richtung zu argumentieren:
es handelt sich aber nicht um eine Zahlenreihe.
Wie ermittelst Du Deine Zahlenreihe?
- Sven Rautenberg
Hallo Freunde des gehobenen Forumsgenusses,
Mittlerweile habe ich noch einen Kollegen gefragt. Es gibt anscheinend doch eine Begrenzung des SQL Strings von höchstens 2 MB. Bei grösseren Statement gibt es anscheinend Probleme.
Es gibt keine Probleme, es gibt halt einen Abbruch seitens des DBMS, die maximale Größe kann man aber einstellen (max_packet_size oder so in MySQL).
Gruß
Alexander Brock
Moin!
weiss jemand ob es eine Grössenbegrenzung bei MySQL Abfragen gibt, d.h. gibt es irgendwie Probleme wenn man ein ziemlich grosses SQL Statement z.b. per PHP absetzt.
Die Doku sagt: Absolute Obergrenze ist 1GB, Default-Obergrenze ist 1MB.
http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
- Sven Rautenberg
yo,
Die Doku sagt: Absolute Obergrenze ist 1GB, Default-Obergrenze ist 1MB.
ich würde gerne mal ein SQL statement von 1 GB größe sehen...
Ilja
Moin!
Die Doku sagt: Absolute Obergrenze ist 1GB, Default-Obergrenze ist 1MB.
ich würde gerne mal ein SQL statement von 1 GB größe sehen...
Wenn du ein BLOB füllst, dürfte das recht simpel erreichbar sein.
- Sven Rautenberg
yo,
ich würde gerne mal ein SQL statement von 1 GB größe sehen...
Wenn du ein BLOB füllst, dürfte das recht simpel erreichbar sein.
ich meinte das eher bezogen auf die größe einer abfrage, bin da vom titel des posts ausgegangen.
Ilja
Moin!
ich würde gerne mal ein SQL statement von 1 GB größe sehen...
Wenn du ein BLOB füllst, dürfte das recht simpel erreichbar sein.
ich meinte das eher bezogen auf die größe einer abfrage, bin da vom titel des posts ausgegangen.
Auch INSERT oder UPDATE ist eine SQL-Abfrage. :)
- Sven Rautenberg
yo,
Auch INSERT oder UPDATE ist eine SQL-Abfrage. :)
naja, darüber kann man sich streiten. was den INSERT/UPDATE betrifft, so können da blogs sicherlich ganz schön ins gewicht fallen und deswegen wohl auch diese enorme größe. aber bezogen auf abfragen im sinne von abfragen wäre das doch schon ganz schön groß. und alleine die vorstellung, solche ein query entwickeln zu müssen, läßt meinen magen umdrehen.....
Ilja
Hallo.
ich würde gerne mal ein SQL statement von 1 GB größe sehen...
Wenn ich etwas ganz bestimmt nicht sehen will, dann sicher das.
MfG, at