Ultimamente ho sperimentato Redis e MongoDB e sembrerebbe che ci siano spesso casi in cui si memorizza un array di ID in MongoDB o Redis. Continuerò con Redis per questa domanda poiché chiedo dell'operatore MySQL IN .
Mi chiedevo quanto sia efficiente elencare un numero elevato (300-3000) di ID all'interno dell'operatore IN, che sarebbe simile a questo:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Immagina qualcosa di semplice come una tabella di prodotti e categorie a cui potresti normalmente UNIRE insieme per ottenere i prodotti da una determinata categoria . Nell'esempio sopra puoi vedere che sotto una data categoria in Redis ( category:4:product_ids
) restituisco tutti gli ID prodotto dalla categoria con id 4 e li inserisco nella SELECT
query sopra all'interno IN
dell'operatore.
Quanto è performante?
È una situazione "dipende"? O c'è un concreto "questo è (non) accettabile" o "veloce" o "lento" o dovrei aggiungere un LIMIT 25
, o non aiuta?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
O dovrei tagliare l'array di ID prodotto restituito da Redis per limitarlo a 25 e aggiungere solo 25 ID alla query anziché 3000 e aggiungerlo LIMIT
a 25 dall'interno della query?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Eventuali suggerimenti / feedback sono molto apprezzati!