MySQL查询包含指定数值的区间的SELECT语句时间复杂度疑问
MySQL SELECT查询的时间复杂度与执行流程分析
假设存在一张存储整数区间的表,startNum和endNum列均已建立独立索引,表中数据如下:
startNum, endNum 3, 8 10, 15 16, 21 28, 42
执行以下查询语句:
SELECT * FROM table WHERE startNum <= 19 AND endNum >= 19
我认为该查询的时间复杂度是O(N),执行流程大致为:
- 通过
startNum索引筛选出所有满足startNum <= 19的前3行数据; - 遍历这3行数据,逐一校验
endNum >= 19的条件,最终筛选出第3行; - 返回结果行
[16, 21]。
我想确认:MySQL是否能执行以下更高效的O(logN)流程?
- 借助
startNum已排序的特性,通过二分查找定位符合条件的行; - 再借助
endNum已排序的特性,通过二分查找确认该行满足条件; - 返回结果行
[16, 21]。
根据MySQL官方文档的描述:
如果操作符是>, <, >=, <=, !=, <>, BETWEEN或LIKE,优化器会使用该条件,但不会再考虑更多的索引部分。
我的判断是MySQL不会执行上述高效的二分查找流程,这个判断是否正确?有没有配置可以让MySQL执行这种二分查找流程?
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

