He estado experimentando con Redis y MongoDB últimamente y parece que a menudo hay casos en los que almacenaría una matriz de ID en MongoDB o Redis. Me quedaré con Redis para esta pregunta, ya que estoy preguntando sobre el operador MySQL IN .
Me preguntaba qué tan eficiente es enumerar una gran cantidad (300-3000) de identificadores dentro del operador IN, que se vería así:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Imagine algo tan simple como una tabla de productos y categorías a la que normalmente podría UNIRSE para obtener los productos de una categoría determinada . En el ejemplo anterior, puede ver que en una categoría determinada en Redis ( category:4:product_ids) devuelvo todos los identificadores de producto de la categoría con el identificador 4 y los coloco en la SELECTconsulta anterior dentro del INoperador.
¿Qué rendimiento tiene esto?
¿Es esta una situación de "depende"? ¿O hay un concreto "esto es (in) aceptable" o "rápido" o "lento" o debería agregar un LIMIT 25, o eso no ayuda?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
¿O debería recortar la matriz de identificadores de productos devueltos por Redis para limitarlos a 25 y solo agregar 25 identificadores a la consulta en lugar de 3000 y LIMITponerlos a 25 desde dentro de la consulta?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
¡Cualquier sugerencia / comentario es muy apreciado!