MySQL“ IN”运算符在(大)数量值上的性能
我最近一直在尝试使用Redis和MongoDB,似乎经常会在MongoDB或Redis中存储 数组。因为我要询问MySQL
运算符,所以我会坚持使用Redis 。
我想知道在IN运算符中列出大量(300-3000) 性能如何,看起来像这样:
SELECT id, name, priceFROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
想象一下简单的 表,您通常可以将它们结合在一起以从某个 获得
。在上面的示例中,您可以看到在Redis()中的给定类别下,我返回了ID为4的类别中的所有产品ID,并将其放置在运算符内的上述查询中。
*category:4:product_ids``SELECT``IN
这表现如何?
这是“取决于情况”的情况吗?还是有一个具体的“无法接受”,“快速”或“缓慢”,或者我应该添加LIMIT 25
,还是没有帮助?
SELECT id, name, priceFROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
还是应该修剪Redis返回的产品ID的数组以将其限制为25,并且仅将25个ID添加到查询中而不是添加3000,LIMIT
然后从查询内部将其添加到25?
SELECT id, name, priceFROM 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