dedlfix: [MySQL] 25-minütige SELECT-Abfrage mit 2 Tabellen beschleunigen?

Beitrag lesen

Hi!

welche Indexe hast Du auf die Tabellen gelegt?

Hast du mal probiert auf die Frage selbst eine Antwort zu finden? Siehst du in der (hier weggelassenen) Ausgabe einen Index? Ich nicht, abgesehen vom Primärschlüssel, der in deiner Abfrage jedoch keine Rolle spielt.

Was liefert "EXPLAIN SELECT ..." mit dem Statement?

EXPLAIN SELECT liefert:
+----+-------------+-------+------+---------------+------+---------+------+-------+------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra                        |
+----+-------------+-------+------+---------------+------+---------+------+-------+------------------------------+
|  1 | SIMPLE      | s     | ALL  | NULL          | NULL | NULL    | NULL | 86121 | Using where; Using temporary |
|  1 | SIMPLE      | r     | ALL  | NULL          | NULL | NULL    | NULL | 89520 | Using where                  |
+----+-------------+-------+------+---------------+------+---------+------+-------+------------------------------+

Hast du versucht, diese Ausgabe zu verstehen?

Wenn keine Indexe gesetzt sind, können logischerweise auch keine verwendet werden (possible_keys: NULL). Ergebnis ist ein Full Table Scan nach Zeilen wo r.oid größer als 0 ist. "Using temporary" heißt, dass eine temporäre Tabelle mit dem Verknüpfungsergebnis angelegt wird. Wenn er bei jedem Wert der einen Tabelle (r.oid) die andere komplett nach dem passenden Verknüpfungswert (s.oid_r) durchsuchen muss, weil er keinen Index verwenden kann, dauert das natürlich.

Lo!