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

使用MySQL或SQL进行的BETWEEN和IN之间的性能差异一般吗?

陆琦
2023-03-14
问题内容

我要根据它们的主键获取一组连续的行,这是一个自动递增的整数。假设没有漏洞,那么它们之间是否有任何性能:

SELECT * FROM `theTable` WHERE `id` IN (n, ... nk);

和:

SELECT * FROM `theTable` WHERE `id` BETWEEN n AND nk;

问题答案:

BETWEEN 超越IN在此情况下(但 这样做 的措施,并检查执行计划,也!),尤其是n成长和统计数据仍然准确。假设:

  • m 你桌子的大小是多少
  • n 你的范围是多少

可以使用索引(n相比微小m

  • 从理论上讲,BETWEEN可以通过对主键索引进行一次“范围扫描”(Oracle讲)来实现,然后遍历大多数n索引叶节点。复杂度将是O(n + log m)

  • IN通常n以对主键索引的一系列“范围扫描” (循环)的形式实现。随着m表的大小,复杂度将始终O(n * log m)… …总是更糟(对于很小的表m或很小的范围可忽略n

索引无法使用(n占的重要部分m

无论如何,您将获得全表扫描并评估每一行的谓词:

  • BETWEEN需要评估两个谓词:一个谓词下限,一个谓词上限。复杂度是O(m)

  • IN需要最多评估n谓词。复杂性是O(m * n)……这总是会变得更糟,或者O(m)如果数据库可以将IN列表优化为哈希图,而不是谓词列表,则可能更糟。



 类似资料:
  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我是一个ASP.NET开发人员,已经满足了我的所有数据库需求(无论是在工作中还是在个人项目中)。 我正在考虑为我的一些个人项目尝试使用LAMP堆栈。 和之间的主

  • 使用AtomicLong.IncrementAndGet方法测试JDK7和JDK8的性能差异,测试数据表明JDK7的性能优于JDK8。为什么JDK7的性能比JDK8好?是什么导致JDK8中的性能差? 系统环境: CPU:Intel(R)至强(R)CPU E5620@2.40 GHz 2.40 GHz(双处理器) 内存:8.00 GB set jvm_opt=-xms1024m-xmx1024m-x

  • 问题内容: 我正在计算稀疏自动编码器的算法。我已经使用和在python中实现了它。代码几乎相同,但是性能却大不相同。matlab完成任务所需的时间为0.252454秒,而numpy为0.973672151566,几乎是原来的四倍。在最小化问题中,我将在以后多次调用此代码,因此这种差异会导致实现之间的延迟几分钟。这是正常行为吗?如何提高numpy的性能? numpy实现: Sparse.rho是调整

  • 是的,这是一个老话题,但我还是有些困惑。 在爪哇,人们说: LinkedList的插入速度比ArrayList快。这里插入是什么意思?如果这意味着向后移动一些元素,然后将元素放在中间的空点,那么ArrayList应该比LinkedList慢。如果插入只意味着添加(对象)操作,这怎么会慢呢?

  • 本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时

  • 是的,这是一个老话题,但我仍然有一些困惑。 在Java,人们说: > 如果我随机访问它的元素,ArrayList比LinkedList快。我认为随机存取意味着“给我第n个元素”。为什么ArrayList更快? LinkedList的删除速度比ArrayList快。我理解这一点。ArrayList速度较慢,因为需要重新分配内部备份阵列。代码说明: LinkedList的插入速度比ArrayList快