Ich habe in letzter Zeit mit Redis und MongoDB experimentiert und es scheint, dass es häufig Fälle gibt, in denen Sie eine Reihe von IDs entweder in MongoDB oder in Redis speichern . Ich bleibe bei Redis für diese Frage, da ich nach dem MySQL IN- Operator frage .
Ich frage mich , wie performant ist es eine große Anzahl (300-3000) von zur Liste ids innerhalb des IN - Operator, die etwa wie folgt aussehen:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Stellen Sie sich etwas so Einfaches wie eine Produkt- und Kategorietabelle vor , die Sie normalerweise zusammenfügen, um die Produkte aus einer bestimmten Kategorie zu erhalten . Im obigen Beispiel können Sie sehen, dass category:4:product_ids
ich unter einer bestimmten Kategorie in Redis ( ) alle Produkt-IDs aus der Kategorie mit der ID 4 zurückgebe und sie in der obigen SELECT
Abfrage innerhalb des IN
Operators platziere.
Wie performant ist das?
Ist das eine "es kommt darauf an" Situation? Oder gibt es ein konkretes "das ist (un) akzeptabel" oder "schnell" oder "langsam" oder sollte ich ein hinzufügen LIMIT 25
, oder hilft das nicht?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
Oder sollte ich das Array der von Redis zurückgegebenen Produkt-IDs kürzen, um es auf 25 zu beschränken, und nur 25 IDs zur Abfrage hinzufügen, anstatt 3000, und LIMIT
es innerhalb der Abfrage auf 25 hinzufügen ?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Anregungen / Feedback wird sehr geschätzt!
id IN (1,2,3 ... 3000)
Leistung im Vergleich zur JOIN-Tabelle von products_categories
. Oder haben Sie das gesagt?
IN
Klausel durchführen (dies kann in einer sortierten Liste, wie Sie zeigen, je nach Algorithmus sogar linear sein) und dann eine lineare Schnittmenge / Suche .