MySQL“ IN”运算符在(大)数量值上的性能

我最近一直在尝试使用Redis和MongoDB,似乎经常会在MongoDB或Redis中存储 数组。因为我要询问MySQL

运算符,所以我会坚持使用Redis 。

我想知道在IN运算符中列出大量(300-3000) 性能如何,看起来像这样:

SELECT id, name, price

FROM products

WHERE id IN (1, 2, 3, 4, ...... 3000)

想象一下简单的 表,您通常可以将它们结合在一起以从某个 获得

。在上面的示例中,您可以看到在Redis()中的给定类别下,我返回了ID为4的类别中的所有产品ID,并将其放置在运算符内的上述查询中。

*category:4:product_ids``SELECT``IN

这表现如何?

这是“取决于情况”的情况吗?还是有一个具体的“无法接受”,“快速”或“缓慢”,或者我应该添加LIMIT 25,还是没有帮助?

SELECT id, name, price

FROM products

WHERE id IN (1, 2, 3, 4, ...... 3000)

LIMIT 25

还是应该修剪Redis返回的产品ID的数组以将其限制为25,并且仅将25个ID添加到查询中而不是添加3000,LIMIT然后从查询内部将其添加到25?

SELECT id, name, price

FROM products

WHERE id IN (1, 2, 3, 4, ...... 25)

任何建议/反馈深表感谢!

回答:

一般而言,如果IN列表太大(对于某些“过大”的未定义值,通常在100或更小范围内),则使用联接会变得更加高效,并在需要时创建临时表。保留数字。

如果数字是一个密集的集合(没有间隙-样本数据表明),那么使用可以做得更好WHERE id BETWEEN 300 AND 3000

但是,大概在集合中存在缺口,这时最好还是使用有效值列表(除非缺口的数量相对较少,在这种情况下,您可以使用:

WHERE id BETWEEN 300 AND 3000 AND id NOT BETWEEN 742 AND 836

或任何差距。

以上是 MySQL“ IN”运算符在(大)数量值上的性能 的全部内容, 来源链接: utcz.com/qa/434989.html

回到顶部