tag:forum.selfhtml.org,2005:/self MySQL-Query mit Unterabfrage ist langsam – SELFHTML-Forum 2008-04-20T09:00:14Z https://forum.selfhtml.org/self/2008/apr/20/mysql-query-mit-unterabfrage-ist-langsam/1236422#m1236422 Linda 2008-04-19T23:38:31Z 2008-04-19T23:38:31Z MySQL-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#m1236425 Vinzenz Mai vinzenzmai@web.de 2008-04-20T07:28:37Z 2008-04-20T07:28:37Z MySQL-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#m1236424 Ilja Lorfinduil@gmx.de 2008-04-20T08:18:55Z 2008-04-20T08:18:55Z MySQL-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#m1236423 Tom selfhtml.tom@online.de 2008-04-20T09:00:14Z 2008-04-20T09:00:14Z MySQL-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>