В последнее время я экспериментировал с Redis и MongoDB, и может показаться, что часто бывают случаи, когда вы сохраняете массив идентификаторов в MongoDB или Redis. Я буду придерживаться Redis для этого вопроса, так как я спрашиваю об операторе MySQL IN .
Мне было интересно, насколько производительно перечислить большое количество (300-3000) идентификаторов внутри оператора IN, что будет выглядеть примерно так:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Представьте себе что-то столь же простое, как таблица продуктов и категорий, которую вы обычно можете ОБЪЕДИНЯТЬ вместе, чтобы получить продукты из определенной категории . В приведенном выше примере вы можете видеть, что в данной категории в Redis ( category:4:product_ids
) я возвращаю все идентификаторы продуктов из категории с идентификатором 4 и помещаю их в указанный выше SELECT
запрос внутри IN
оператора.
Насколько это эффективно?
Это ситуация "в зависимости от обстоятельств"? Или есть конкретное «это (не) приемлемо», «быстро» или «медленно», или я должен добавить LIMIT 25
, или это не помогает?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
Или мне следует обрезать массив идентификаторов продукта, возвращаемых Redis, чтобы ограничить его до 25 и добавить только 25 идентификаторов в запрос, а не 3000, и LIMIT
увеличить его до 25 изнутри запроса?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Любые предложения / отзывы очень ценятся!