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