tag:forum.selfhtml.org,2005:/selfMySQL-Query mit Unterabfrage ist langsam – SELFHTML-Forum2008-04-20T09:00:14Zhttps://forum.selfhtml.org/self/2008/apr/20/mysql-query-mit-unterabfrage-ist-langsam/1236422#m1236422Linda2008-04-19T23:38:31Z2008-04-19T23:38:31ZMySQL-Query mit Unterabfrage ist langsam<p>Hallo zusammen,</p>
<p>ich benutze MySQL Datenbank 5.0 (MyISAM) in der Entwicklungsumgebung auf Windows. Die Datenbank ist etwa 500MB groß.</p>
<p>Im Moment versuche ich eine Abfrage zu starten, die meinen ganzen Rechner lahm legt. Die Struktur ist so:</p>
<p>SELECT * FROM t1 WHERE t1.column1 IN<br>
(SELECT column1 FROM t2 ORDER BY column1);</p>
<p>Wobei die Unterabfrage für sich 0.5 Sekunden läuft und 8 Datensätze liefert. Die eigentliche Abfrage wenn auf einen Datensatz modifiziert:</p>
<p>SELECT * FROM t1 WHERE t1.column1 = 1</p>
<p>läuft unter 0.2 Sekunden.</p>
<p>Sobald ich die beiden Abfragen verbinde wird mein Rechner zu 100% von mysql-nt Dienst ausgelastet, sogar in Task Manager komme ich kaum rein um das Prozess zu beenden. Auch nach 10 Minuten ist kein Ergebnis da. Am Query-Tool liegt es nicht. Ich habe es mittlerweile auch in der Konsole probiert.</p>
<p>Können mir SQL-Profis da draußen einen Tip geben, woran es liegen könnte oder wie ich Unterabfragen grundsätzlich performanter gestalten kann?</p>
<p>Gruß, Linda</p>
<div class="signature">-- <br>
2 hours of try and error can save 10 minutes of manual reading
</div>
https://forum.selfhtml.org/self/2008/apr/20/mysql-query-mit-unterabfrage-ist-langsam/1236425#m1236425Vinzenz Maivinzenzmai@web.de2008-04-20T07:28:37Z2008-04-20T07:28:37ZMySQL-Query mit Unterabfrage ist langsam<p>Hallo Linda</p>
<blockquote>
<p>Im Moment versuche ich eine Abfrage zu starten, die meinen ganzen Rechner lahm legt. Die Struktur ist so:</p>
<p>SELECT * FROM t1 WHERE t1.column1 IN<br>
(SELECT column1 FROM t2 ORDER BY column1);</p>
</blockquote>
<p>a) Vermeide SELECT *, nutze SELECT <spaltenliste>.<br>
b) Nutze <a href="http://dev.mysql.com/doc/refman/5.0/en/using-explain.html" rel="nofollow noopener noreferrer">EXPLAIN</a>, um Dir anzeigen zu lassen, was MySQL so lange macht.<br>
c) Hast Du entsprechende Indexe gesetzt?<br>
d) Werden diese genutzt (EXPLAIN)?<br>
e) Hast Du schon einmal einen simplen JOIN mit dem <a href="http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html" rel="nofollow noopener noreferrer">DISTINCT</a>-Schlüsselwort<br>
getestet (und Dir ebenfalls EXPLAIN angeschaut)?</p>
<p>Freundliche Grüße</p>
<p>Vinzenz</p>
https://forum.selfhtml.org/self/2008/apr/20/mysql-query-mit-unterabfrage-ist-langsam/1236424#m1236424IljaLorfinduil@gmx.de2008-04-20T08:18:55Z2008-04-20T08:18:55ZMySQL-Query mit Unterabfrage ist langsam<p>yo,</p>
<p>zu dem was Vinzenz gesagt hat würde ich dir noch den tipp geben den alias namen vor den spaltenbezeichnungen zu setzen. die problematik kommt aber wohl aus dem ORDER BY in der unterabfrage, die nicht notwenig ist.</p>
<p>SELECT t1.spalte1, t1.spalte2... FROM t1 WHERE t1.spalte1 IN<br>
(SELECT t2.spalte1 FROM t2);</p>
<p>Ilja</p>
https://forum.selfhtml.org/self/2008/apr/20/mysql-query-mit-unterabfrage-ist-langsam/1236423#m1236423Tomselfhtml.tom@online.de2008-04-20T09:00:14Z2008-04-20T09:00:14ZMySQL-Query mit Unterabfrage ist langsam<p>Hello,</p>
<blockquote>
<p>ich benutze MySQL Datenbank 5.0 (MyISAM) in der Entwicklungsumgebung auf Windows. Die Datenbank ist etwa 500MB groß.</p>
<p>Im Moment versuche ich eine Abfrage zu starten, die meinen ganzen Rechner lahm legt. Die Struktur ist so:</p>
</blockquote>
<p>Die Abfrage alleine legt den Rechner nicht lahm, sondern der dafür benötigte Speicher bei der Größe der DB. 500MB sind schon nicht mehr mit den "Out-of-the-box"-Einstellungen für die Speichernutzung zu handhaben.</p>
<p>Man kann die Grenzen aber nicht alleine an der DB-Größe festmachen, weil es auch von der Anzahl der Datensätze, der Länge der Indexfelder, der Anzahl der Indexe etc. abhängt, wann MySQL mit den Standardeinstellungen einschläft. Außerdem ist es auch wenig sinnvoll, 512MB Speicher zuzuordnen, wenn Dein System nur 264 hat ;-)</p>
<p>Ich habe die (älteren) Beispiele mal unter <a href="http://selfhtml.bitworks.de/mysql/config-samples/" rel="nofollow noopener noreferrer">http://selfhtml.bitworks.de/mysql/config-samples/</a> abgelegt. Musst Du mal schauen, ob es da ggf. inzwischen neuere gibt in der MySQL-Doku.</p>
<p>Ein harzliches Glückauf</p>
<p>Tom vom Berg</p>
<p><a href="http://bergpost.annerschbarrich.de" rel="nofollow noopener noreferrer">http://bergpost.annerschbarrich.de</a>.</p>
<div class="signature">-- <br>
Nur selber lernen macht schlau<br>
</div>