2017-07-25 4 views
1

Ich bin neu in MySQL und PHP und ich bin in ein Performance-Problem stecken. Ich habe eine Datenbank mit verschiedenen eindeutigen IDs und ich möchte mehrere Reihen von id extrahieren (aus einem Array) aus über 5000. Die beste Lösung kam ich so weit bis verwenden:Suche nach einem einzigen in einer SQL-Datenbank

SELECT * FROM `table` WHERE id IN ($idArray); 

Gibt es eine effizienterer Weg, dies zu tun? Die 'ID' in 'Tabelle' ist eine eindeutige Zeichenfolge.

+0

Warum sind die IDs Zeichenfolgen? – ThisGuyHasTwoThumbs

+3

Wenn die IDs * eindeutig sind - da sie eindeutige Indizes ('PRIMARY' oder' UNIQUE') in der Datenbank haben, dann sollte das bei nur 5000 Datensätzen so schnell wie eine Schaufel sein! – CD001

+3

Dies ist ungefähr so ​​effizient, wie es wird, stellen Sie einfach sicher, dass Sie einen Index für das ID-Feld haben. –

Antwort

0

Ich habe 70.000 Nummern in einer IN Liste "träge" gesehen.

Teil des Problems ist Indexierung. Ihr table benötigt INDEX(id) (oder besser noch PRIMARY KEY(id)).

Ein Teil des Problems ist Caching. Wenn table klein genug ist, um in den buffer_pool zu passen, und dieser Cache warm ist, dann ist es eher wie warmes und nasses Zeug, das von einer Schaufel fällt.

Aber ... Wenn Ihr "Array" ist bereits in einer Tabelle, dann einfach JOIN zu dieser Tabelle. Das wird wahrscheinlich schneller sein. OTOH, eine Tabelle nur für diesen Zweck zu bauen, wird wahrscheinlich langsamer sein.

Verwandte Themen