Jonny 5: MySql: id IN( ... ) vs JOIN

Beitrag lesen

Hallo liebes Forum,

ich suche schon eine Weile nach einer Lösung für folgendes Problem:

Ich möchte aus einer größeren Datenbank Datensätze in einer vorgegebenen ID-Reihenfolge holen. Bisherige Ansätze:

Variante 1
---------------------
SELECT * FROM my_table WHERE id IN(4,2,3,1)
ORDER BY id = 4 DESC,id = 2 DESC,id = 3 DESC,id = 1 DESC

Viel Text, wenn ~100 Ids geholt werden.

Variante 2 (mysli_multi_query)
---------------------
CREATE TEMPORARY TABLE buffer (id int(11)) TYPE=HEAP;
INSERT INTO buffer VALUES (4),(2),(3),(1);
SELECT b.* from buffer JOIN my_table b USING(id);
DROP TEMPORARY TABLE IF EXISTS buffer;

Vorteile:
-Keine lange Sortierschlange nötig.
-Weitere int/float Felder können unproblematisch addiert werden.

Nachteil: Meist werden die id-Tables (engine=memory) nicht im Speicher sondern auf der Platte generiert. Habe auch schon zb mit 'max_rows=100' ohne Erfolg getestet. Mehr als ~100 Ids stehen selten in solch einer Tabelle, also eigentlich nicht besonders speicherintensiv. Selbst wenn ich nur Ids in die Tabelle schreibe - ausschließlich INT - wird auf die Platte geschrieben.

tuning-primer.sh meint:
80-100% were created on disk.
Perhaps you should increase your tmp_table_size and/or max_heap_table_size

Habe schon sämtliche Limits in my.cnf angehoben ohne irgendeine Änderung.

Weiss jemand eine bessere/elegantere Lösung. Ich möchte Datensätze in einer vorgegebenen id (primary) Reihenfolge möglichst schnell aus der Datenbank.

herzliche Grüße,
Jonny 5