Производительность оператора MySQL «IN» на (большом?) Количестве значений

В последнее время я экспериментировал с Redis и MongoDB, и, похоже, часто бывают случаи, когда вы храните массив id либо в 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 идентификаторов ' s к запросу, а не к 3000 и LIMIT , то есть к 25 изнутри запроса?

SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)

Приветствуются любые предложения / отзывы!

79
задан Jonathan Leffler 12 November 2012 в 16:37
поделиться