当前位置: 首页 > 面试题库 >

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

劳夕
2023-03-14
问题内容

我最近一直在尝试使用Redis和MongoDB,似乎经常会在MongoDB或Redis中存储 ID 数组。因为我要询问MySQL IN
运算符,所以我会坚持使用Redis 。

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

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

或任何差距。



 类似资料:
  • 问题内容: 我正在尝试通过IN运算符使用MySQL查询,并在Golang项目中使用未定义数量的参数。 我正在使用该软件包,并尝试在此Stackoverflow答案上构建我的解决方案:如何使用Golang在SQL中执行IN查找? 我读过一些类似的文章,为我提供了一些建议,但是我被困在查询的执行部分,因为它不允许直接使用slice作为参数。 Golang在执行时向我返回错误: 查询:SELECT ID

  • 本文向大家介绍MySQL XOR运算符与IN子句?,包括了MySQL XOR运算符与IN子句?的使用技巧和注意事项,需要的朋友参考一下 如果一个或另一个操作数(或表达式)但不是两个都为TRUE,则MySQL XOR返回TRUE。IN子句用于指定任何其他MySQL查询的条件。 让我们先创建一个表 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 输出结果 这将产生以下输出-

  • 问题内容: 我在Innodb中有一个表格,其中有超过1亿行。 我必须知道外键= 1时是否有超过5000行。我不需要确切的数字。 我做了一些测试: => 16秒 => 16秒 => 0.6秒 我的网络和治疗时间会更长一些,但可能会超过15.4秒! 你有更好的主意吗? 谢谢 编辑:[添加了OP的相关评论] 我尝试从WHERE fk = 1表中选择SELECT SQL_NO_CACHE COUNT(fk

  • 问题内容: 我有一个名为NUMS的表,其中只有n列。 然后在其中填充值1,2,3,4,5,null。 现在查询 在这种情况下,我想它已转换为 我也在比较n和一个应该产生未知值的null值,它应该返回一个空集。但是它返回1,2(null不返回,尽管包含在IN运算符中) 现在查询 …转换为: 在这里,我上面所说的有效,并且不返回任何内容。 任何人都可以详细解释发生了什么。 问题答案: 好,我找到了答案

  • 问题内容: 对于百万分之一的时间,我希望使用Java中的运算符,类似于SQL中的运算符。它可以作为编译器语法糖来实现。所以这 …真的很棒。实际上,以上内容与此处相当冗长的(且不适用于原始类型)构造相同: 或针对,和类似的类型: 也许会有更有效的实现。 题: 这样的东西会成为Java 8的一部分吗?如果没有,我该如何提出建议?还是我现在可以使用任何等效的构造? 问题答案: 使用op4j: 使用相同的

  • 问题内容: 我有下面的SQL,但无法正常工作 产品类别是婴儿礼物篮,关键字字段是婴儿礼物篮,婴儿礼物 基本上想在关键字列表中找到product_category时获得sub_category? 问题答案: 您将需要使用 使用规范化的数据库结构,这将更加容易和高效。(您当前在单个列中包含多个关键字的结构违反了第一个范式)