博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql构造器_MySQL行构造器表达式优化(Row Constructor Expression)
阅读量:1532 次
发布时间:2019-04-21

本文共 1252 字,大约阅读时间需要 4 分钟。

mysql 官方文档行构造器表达式优化(Row Constructor Expression Optimization)这一节里面,对行构造表达式及其优化进行了介绍,因为用的不多,也没太关注过。但是看了几个示例,发现有一些逻辑还是与预想的不一样,下面详细介绍。

1. 行构造表达式示例

SELECT * FROM t1 WHERE (column1,column2) = (1,1);

其中 (column1,column2) 与 (1,1)就是行构造表达式。

(column1,column2) = (1,1) 这个表达式,在逻辑上,等同于:

column1 = 1 AND column2 = 1

这个也比较好理解,但是,如果把

(column1,column2) > (1,1) 理解为 column1 > 1 AND column2 > 1,那就错了。实际上应该是

column1 > 1 OR ((column1 = 1) AND (column2 > 1))

如果不相信的话,看下面这个案例:

mysql> select * from t_test;

+------+------+------+

| c1 | c2 | c3 |

+------+------+------+

| 1 | 1 | 1 |

| 1 | 1 | 0 |

| 1 | 2 | 2 |

| 1 | 2 | -1 |

+------+------+------+

4 rows in set (0.00 sec)

mysql> select * from t_test where c1=1 AND (c2,c3) > (1,1);

+------+------+------+

| c1 | c2 | c3 |

+------+------+------+

| 1 | 2 | 2 |

| 1 | 2 | -1 |

+------+------+------+

2 rows in set (0.00 sec)

mysql> select * from t_test where c1 = 1 AND (c2 > 1 OR ((c2 = 1) AND (c3 > 1)));

+------+------+------+

| c1 | c2 | c3 |

+------+------+------+

| 1 | 2 | 2 |

| 1 | 2 | -1 |

+------+------+------+

2 rows in set (0.00 sec)

(c2,c3) > (1,1),结果把c3为-1的记录也查出来了,是不是与期望有点落差,但事实就是这样。它的逻辑是先比较字段c2,如果c2 > 1,直接返回true,不再比较c3。如果c2=1,再比较字段c3。

2. 行构造表达式优化

关于行构造表达式的优化,主要还是转换成多个单独的条件表达式,由 or and 这类逻辑运算符连接,这样才能最大可能用上索引。

转载地址:http://phkdy.baihongyu.com/

你可能感兴趣的文章
LeetCode 674. 最长连续递增序列
查看>>
LeetCode 70. 爬楼梯(动态规划)
查看>>
数据结构--位图 BitMap
查看>>
朴素贝叶斯算法--过滤垃圾短信
查看>>
向量空间 Vector Space -- 推荐系统
查看>>
B+树 -- MySQL数据库索引
查看>>
A*搜索算法--游戏寻路
查看>>
我把公众号所有的精华文章都整理出来了
查看>>
ROS学习过程中的错误记录5 - sw2urdf导出功能包的编译错误
查看>>
matlab函数重载功能的实现笔记
查看>>
Eigen与MATLAB常用运算的对应关系
查看>>
线程与定时器的区别
查看>>
带宽大小及各频段对系统的影响
查看>>
MATLAB - plot的Tex字体设置
查看>>
力矩环PID调参要领
查看>>
pybotics工具箱中机器人模型的定义
查看>>
MATLAB - 数字信号包络线的求取
查看>>
产品可靠性测试 - 学习笔记(1)
查看>>
传感器的基本参数笔记
查看>>
vscode注释乱码的最简单解决方案
查看>>