Ostatnio eksperymentowałem z Redis i MongoDB i wydaje się, że często zdarza się, że przechowujesz tablicę identyfikatorów w MongoDB lub Redis. W przypadku tego pytania zostanę przy Redis, ponieważ pytam o operator MySQL IN .
Zastanawiałem się, jak wydajne jest umieszczenie dużej liczby (300-3000) identyfikatorów wewnątrz operatora IN, które wyglądałyby mniej więcej tak:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Wyobraź sobie coś tak prostego, jak tabela produktów i kategorii, do której normalnie możesz DOŁĄCZYĆ razem, aby uzyskać produkty z określonej kategorii . W powyższym przykładzie widać, że pod daną kategorią w Redis ( category:4:product_ids) zwracam wszystkie identyfikatory produktów z kategorii o id 4 i umieszczam je w powyższym SELECTzapytaniu wewnątrz INoperatora.
Jak wydajne jest to?
Czy jest to sytuacja typu „to zależy”? A może jest konkretne „to jest (nie) akceptowane”, „szybko” lub „wolno”, czy powinienem dodać LIMIT 25, czy to nie pomaga?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
A może powinienem przyciąć tablicę identyfikatorów produktów zwracanych przez Redis, aby ograniczyć ją do 25 i dodać do zapytania tylko 25, a nie 3000, a LIMITdo 25 z wewnątrz zapytania?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Wszelkie sugestie / opinie są bardzo mile widziane!