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 这类逻辑运算符连接,这样才能最大可能用上索引。

mysql构造函数_MySQL行构造器表达式优化(Row Constructor Expression)相关推荐

  1. 优化mysql数据库_MySQL数据库十大优化技巧

    WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题.希望本文能对大家掌握MySQL优化技巧有所帮助. 1. 优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用 ...

  2. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  3. mysql推荐内存_mysql大内存高性能优化方案

    mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看: ke ...

  4. mysql解释器优化_MySQL——SQL性能分析优化利器之Explain

    系统性能的优劣取决于我们sql的查询速度,MySQL Explain命令是分析SQL性能及优化不可缺少的一部分. Explain被我们称为解释器,通过 explain 我们可以知道以下信息:表的读取顺 ...

  5. mysql sql优化_MySQL数据库SQL语句优化原理专题(三)

    需求 做过开发的同学,对分页肯定不会陌生,因为很多前台页面展示,为了更好的展示数据,就会用到分页,所以如何写一个高性能的分页SQL语句,是每一个开发人员需要掌握的技能. 分页SQL 这里给大家写一个分 ...

  6. mysql数据库的行级锁有几种_mysql锁之三种行级锁介绍

    本文主要介绍 1.mysql三种行锁介绍 2.RR模式下,next-key lock为什么可以解决幻读问题 首先,创建一张表: mysql> show create table test01\G ...

  7. mysql锁优化_mysql锁以及配置优化

    1. 看有没有锁等待 SHOW STATUS LIKE 'innodb_row_lock%'; 2. 查看哪个事务在等待(被阻塞了) USE information_schema SELECT * F ...

  8. mysql js 命令行登录_MYSQL常用命令

    1.連接Mysql 格式: mysql -h主機地址 -u用戶名 -p用戶密碼 1.連接到本機上的MYSQL. 首先打開DOS窗口,然後進入目錄mysql\bin,再鍵入命令mysql -u root ...

  9. mysql locate不走索引_MySQL 索引——定位并优化慢 SQL

    定位并优化慢查询SQL.png 为什么要学习定位并优化慢查询 SQL 日常开发中,在数据量比较小的表中,SQL 的执行效率可能没什么问题,但是随着表数据量的增加,慢 SQL 可能就会慢慢浮现,因此学习 ...

最新文章

  1. remote: HTTP Basic: Access denied
  2. 8.1 mnist_soft,TensorFlow构建回归模型
  3. MFC实现获取鼠标位置的小程序
  4. The template root requires exactly one element.
  5. BUU刷题记录——Misc(一)
  6. VMware扩展Tanzu产品系列与合作关系
  7. 利用sql_trace跟踪一个指定会话的操作
  8. ios中mvc的FormsAuthentication.SetAuthCookie(cookieUserName, false)失败
  9. XBAP 承载 Silverlight 的示例
  10. 一、全国计算机三级数据库考试——理论知识总结(选择题)
  11. 计算机管理软件禁止玩游戏,电脑有没有禁止玩网络游戏,但可以上网的软件?...
  12. 服务器光纤信号灯,光纤收发器的六个指示灯都代表什么?
  13. Linux terminal 终端快捷键汇总
  14. hovm什么意思_小火枪的微博 - 水晶球财经网
  15. Java版简易画图板的实现
  16. Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例
  17. 基于springboot的小区社区物业管理系统
  18. TeamTalk客户端源码分析七
  19. python亚马逊运营工具_GitHub - WuLC/AmazonRobot: Amazon商品引流的 python 爬虫
  20. Android AES加密解密工具类

热门文章

  1. 风影ASP.NET基础教学 5 验证控件(二) 扩展自己的验证控件
  2. IDEA - 解决 Maven 初始化配置 web.xml 为 2.3 的问题
  3. 造成java.io.IOException: Stream Closed异常的代码
  4. 关于C#中async/await中的异常处理(上)
  5. R 报错:package ‘***’ is not available (for R version ****) 的解决方案
  6. 在Visual Studio代码中显示空白字符
  7. 如何在更大的div内使图像中心(垂直和水平)居中[重复]
  8. 如何导入给定名称的模块为字符串?
  9. 大数据的发展,伴随的将是软件工程师的渐退,算法工程师的崛起
  10. HDFS Namenode启动过程