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_idsich unter einer bestimmten Kategorie in Redis ( ) alle Produkt-IDs aus der Kategorie mit der ID 4 zurückgebe und sie in der obigen SELECTAbfrage innerhalb des INOperators 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 LIMITes 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?
INKlausel durchführen (dies kann in einer sortierten Liste, wie Sie zeigen, je nach Algorithmus sogar linear sein) und dann eine lineare Schnittmenge / Suche .