J'ai récemment expérimenté Redis et MongoDB et il semblerait qu'il y ait souvent des cas où vous stockeriez un tableau d' identifiants dans MongoDB ou Redis. Je vais m'en tenir à Redis pour cette question puisque je pose la question sur l' opérateur MySQL IN .
Je me demandais à quel point il était performant de lister un grand nombre (300-3000) d' identifiants dans l'opérateur IN, ce qui ressemblerait à ceci:
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Imaginez quelque chose d'aussi simple qu'un tableau de produits et de catégories que vous pourriez normalement JOINDRE ensemble pour obtenir les produits d'une certaine catégorie . Dans l'exemple ci-dessus, vous pouvez voir que sous une catégorie donnée dans Redis ( category:4:product_ids
), je renvoie tous les identifiants de produit de la catégorie avec l'ID 4 et les place dans la SELECT
requête ci-dessus à l'intérieur de l' IN
opérateur.
À quel point est-ce performant?
Est-ce une situation «ça dépend»? Ou y a-t-il un concret "ceci est (in) acceptable" ou "rapide" ou "lent" ou devrais-je ajouter un LIMIT 25
, ou cela n'aide-t-il pas?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
Ou devrais-je réduire le tableau des identifiants de produit renvoyés par Redis pour le limiter à 25 et ajouter seulement 25 identifiants à la requête plutôt que 3000 et le faire LIMIT
passer à 25 à l'intérieur de la requête?
SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Toutes les suggestions / commentaires sont très appréciés!