Tenho experimentado com Redis e MongoDB recentemente e parece que muitas vezes há casos em que você armazenaria uma matriz de id no MongoDB ou Redis. Vou ficar com o Redis para essa pergunta, já que estou perguntando sobre o operador MySQL IN .
Eu queria saber qual é o desempenho de listar um grande número (300-3000) de ids dentro do operador IN, que seria mais ou menos assim:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Imagine algo tão simples como uma tabela de produtos e categorias que você normalmente juntaria para obter os produtos de uma determinada categoria . No exemplo acima, você pode ver que, sob uma determinada categoria no Redis ( category:4:product_ids
), eu retorno todos os ids de produto da categoria com id 4 e os coloco na SELECT
consulta acima dentro do IN
operador.
Quão performante é isso?
Esta é uma situação do tipo "depende"? Ou existe um concreto "isto é (in) aceitável" ou "rápido" ou "lento" ou devo adicionar um LIMIT 25
, ou isso não ajuda?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
Ou devo cortar a matriz de ids do produto retornada pelo Redis para limitá-la a 25 e apenas adicionar 25 ids à consulta, em vez de 3000 e LIMIT
colocá-la em 25 de dentro da consulta?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Qualquer sugestão / feedback é muito apreciada!