Mysql 带IN或or的优化

Mysql 带IN或or的优化,mysql,optimization,Mysql,Optimization,我有一组大值需要在MySQL中进行比较 我可以知道哪个更快吗? 例如: Opt 1: SELECT * FROM table WHERE v = 1 or v = 2 or v = 3 or v = 4 or... v = 100 Opt 2: SELECT * FROM table WHERE v IN (1,2,3,4,5,6,7,8,...,100) 我可以知道哪一个选项对大价值更快吗?有更好的解决办法吗?这些都是连续的数字吗?那我就用 SELECT * FROM table WHE

我有一组大值需要在MySQL中进行比较

我可以知道哪个更快吗? 例如:

Opt 1:
SELECT * FROM table WHERE v = 1 or v = 2 or v = 3 or v = 4 or... v = 100

Opt 2: 
SELECT * FROM table WHERE v IN (1,2,3,4,5,6,7,8,...,100)

我可以知道哪一个选项对大价值更快吗?有更好的解决办法吗?

这些都是连续的数字吗?那我就用

SELECT * FROM table WHERE v BETWEEN 1 AND 100

这些都是连续的数字吗?那我就用

SELECT * FROM table WHERE v BETWEEN 1 AND 100

当我研究数据库时,我的导师告诉我,它们实际上可以归结为同一件事

当我研究数据库时,我的导师告诉我,它们实际上可以归结为同一件事

假设数字不是连续的,出于两个原因,首选中的

  • 可读性更强
  • 优化为比或语句运行更快
  • 假设数字不是连续的,出于两个原因,首选
    中的

  • 可读性更强
  • 优化为比或语句运行更快

  • 从逻辑上讲,它们是等价的。但是优化器通常在vs或.Good point中工作得更好。我想我当时并没有特别提到速度。从逻辑上讲,它们是等价的。但是优化器通常在vs或.Good point中工作得更好。我想我当时并没有特别提到速度。IN列表是经过排序的,因此可以作为二进制搜索来进行查找。一组OR一次只计算一个条件,直到其中一个条件匹配:IN列表被排序,因此可以作为二进制搜索进行查找。一组OR每次只计算一个条件,直到其中一个匹配:@benmsia您的示例只是建议它们是连续的,在这种情况下,中间值比枚举100个数字快得多,因为引擎只需执行一次范围检查,而不是100次比较。如果有间隙,请查看OMG小马的答案。@benmsia您的示例只是建议它们是连续的,在本例中,中间值比枚举100个数字快得多,因为引擎只需执行一次范围检查,而不是100次比较。如果有差距,那么看看OMG小马的答案。