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 SELECT
zapytaniu wewnątrz IN
operatora.
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 LIMIT
do 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!