关于mysql or 的 底层执行
来源:互联网 发布:程序员必会的语言 编辑:程序博客网 时间:2024/06/06 09:55
一直 有一个 疑问 mysql 的 or 到底是怎么执行的
例如 select * from user where createtime=1474253267 or name='zs' or class =123
已知 表中存在 满足 createtime name class 其中一个的条件的数据有且只有一条 , 且同时满足其3个条件
有疑问 mysql 在筛选数据的时候 对于or 有没有短路 情况 即 满足 or 条件 其中的 一个 即返回数据 不执行之后的 的 or 条件
如果存在 短路情况 则必然存在
S select * from user where createtime=1474253267 or name='zs' or class =123 和 以下3条
A select * from user where createtime=1474253267
B select * from user where name='zs'
C select * from user where class =123
其中的 一条的执行 时间 相同
在通过 重复插入 上述 相同条件后得出结论 并不存在短路情况 即 原sql 语句和的 执行 时间都大于 abc
疑惑 mysql 在执行 or 条件时 底层的执行 情况
猜想 mysql 并不是 在逐行 对 多个or 条件进行 比较 而是对单个列 直接 逐行 比 对 一个or条件比对完成 再对下一个or条件 比对 直至完成 .
如果 这样理解 可以解释 以上原 sql 执行 情况都大于ABC ,但是这种 明显 为 UNION ALL 执行的 情况 ,而 or 和 UNION ALL 在执行效率 和 执行过程 有明显差异
故否定 此猜想
且发现 D select * from user where createtime=1474253267 and name='zs' and class =123 在理论上筛选的过程 使用的条件 和得到的数据 都应该相同 ,故 执行 时间 应该类似.但执行时间结果为 S>D>(A或B或C) 很是不理解
希望得到 大牛 帮助
- 关于mysql or 的 底层执行
- mysql关于or的索引问题
- JDBC的底层执行过程
- 关于底层的思考
- 关于sql中or与and的执行顺序
- 关于const的底层实现
- 关于android底层的认识
- MySQL学习之——关于or的索引问题
- MySql索引的底层实现
- Handler 的执行原理----底层代码
- 计算机底层执行一条指令的过程
- 从底层理解Python的执行
- 从底层理解Python的执行
- 从底层理解Python的执行
- 【mysql】关于mysql执行时的Sleep状态
- 关于执行free函数的时候提示” double free or corruption“错误的解释和解决办法
- mysql的where查询语句后有多个“or”的SQL语句执行分析!
- 三种关于Linux执行.sh文件,提示No such file or directory错误的解决办法
- System.out.println(5.00 - 4.90);结果分析
- 将字符串插入到另一个字符串的指定位置
- 【codevs2822】 爱在心中 tarjan+统计点的个数
- dB的意义
- 关于Java -jar参数的使用心得
- 关于mysql or 的 底层执行
- 实验对象随机分组程序
- CentOS7下解决yum install mysql-server没有可用包的问
- 磁珠及与电感的区别
- #pragma、条件编译预处理指令用法(Visual Studio)
- eclipse新发现功能之dos和terminal(ssh连接)
- zeppelin支持matplotlib配置
- MT6737 Android N 平台 Audio系统学习----AudioTrack
- LeetCode 188 Best Time to Buy and Sell Stock IV