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

年龄[1、2、3]与1和3之间的年龄

艾璞瑜
2023-03-14
问题内容

我有一个InnoDB表和一个age列索引,就像这样

   CREATE TABLE Person (

      ....
      age int(11) not null;
      key (age);
      ....
   ) engine=InnoDB;

我只想了解这些查询背后的真实情况:

SELECT * FROM Person WHERE age IN [1, 2, 3];

SELECT * FROM Person WHERE age BETWEEN 1 AND 3;

据我了解,第一个MySQL将使用列寿命索引,而第二个则无法使用。是吗?哪个对性能更好?


问题答案:

这两个查询都将使用索引。

查询A将转换为:

select * from person where age = 1 or age = 2 or age 3;

查询B将转换为

select * from person where age >= 1 and age <= 3;

因此查询A将使用OR进行3个测试。
查询B将使用AND进行2个测试。

查询B更快。

通常,使用AND的查询比使用的查询要快OR
另外,查询B执行的测试更少,并且由于它正在测试范围,因此可以更轻松地排除不需要的结果。



 类似资料:
  • 本文向大家介绍 a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?相关面试题,主要包含被问及 a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?时的应答技巧和注意事项,需要的朋友参考一下 补充:    

  • 为什么这个程序的输出是而不是 当你除以3/2,它等于1.5,我认为Java只取整数的第一个值。发生什么事?

  • 问题内容: 该的getTime()获取以毫秒为某一特定日期时间。能否可靠地用于18世纪的约会。我们使用Millis并将其存储在字符串变量中以备将来比较。过去可以使用多长时间有限制? 问题答案: 如果您要比较遥远的过去的日期/时间,我强烈建议您看一下JodaTime。或者实际上是任何类型的日期/时间比较和计算。这是一个很棒的图书馆! 不要依靠getTime()做你想做的事情。至少考虑使用Java的C

  • 题目链接 NowCoder 题目描述 要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 A ? B : C。 解题思路 使用递归解法最重要的是指定返回条件,但是本题无法直接使用 if 语句来指定返回条件。 条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句。利用这一特性,将递归的返回条件取非然后作为

  • 问题内容: Python如何评估表达式? 我插了多少,这就是答案。请任何人可以解释这种行为 因为它是印刷,因为它是印刷 问题答案: 您的表情与: 可以在任何数字表达式之前使其为负,或不执行任何操作(存在对称性选项)。带有负号: 和 我看到您澄清了您的问题,说您来自C背景。在Python中,没有像C和C这样的增量运算符,这可能是造成混淆的原因。要递增或递减变量,或在Python中使用以下样式:

  • 本文向大家介绍系列1 ^ 2 + 3 ^ 2 + 5 ^ 2 +的总和。。。+(2 * n-1)^ 2在C ++中,包括了系列1 ^ 2 + 3 ^ 2 + 5 ^ 2 +的总和。。。+(2 * n-1)^ 2在C ++中的使用技巧和注意事项,需要的朋友参考一下 在这个问题上,我们得到级数n。我们的任务是找到给定n值的序列1 ^ 2 + 3 ^ 2 + 5 ^ 2 + ... +(2 * n-1)