条件化简:移除不必要括号、常熟传递、等值传递、移除无用条件、表达式计算、HAVING子句和WHERE子句合并、常量表检测

外连接消除:空值拒绝(外连接中通过where子句过滤NULL值),符合条件后,内外连接可以互相转换,优化器可以评估表的不同连接顺序降低查询成本

子查询优化:

按返回的结果集不同子查询分为标量子查询(查询单一值)、行子查询、列子查询和表子查询

按与外层查询关系分为不相关子查询(子查询不依赖外层查询结果)和相关子查询

子查询在布尔表达式的使用:

对于、=之类操作符来说,子查询只能是标量子查询或行子查询

对于[NOT] IN(判断某个操作数是否在某个子查询结果集中)/ANY/SOME (只要子查询结果集中存在某个值和给定操作数比较为true,则表达式为true)/ALL(操作数必须与结果集全部匹配)来说,子查询是一个集合

EXIST,仅需要判断子查询是否有记录。

注:

子查询必须用小括号扩起来。

在SELECT子句中的子查询必须是标量子查询。

在想要得到标量子查询或者行子查询,但又不能保证子查询的结果集只有一条记录时,应该使用LIMIT 1语句来限制记录数量。

对于[NOT] IN/ANY/SOME/ALL子查询来说,子查询中不允许有LIMIT语句。

ORDER BY子句、DISTINCT语句以及没有聚集函数以及HAVING子句的GROUP BY子句在子查询中无意义,查询优化器会直接删除。

不允许在一条语句中增删改某个表的记录时同时还对该表进行子查询。

物化表:不直接将不相关子查询的结果集作为外层查询的参数,而是将结果集写入一个临时表中,写入记录会被去重,表的列就是结果集的列。

物化表查询相当于子查询与外层查询的内连接。

半连接:对于s1中的某条记录,只关心在s2中是否有记录与之匹配,而不关心具体有多少条记录与之匹配,只保留s1表的记录。

半连接实现策略,查询优化器会选择以下成本最低的策略:

Table pullout (子查询中的表上拉):子查询查询条件只有主键或唯一索引时,转连接查询。

DuplicateWeedout execution strategy (重复值消除):加入结果集前,尝试加入到只包含主键的临时表,根据能否插入判断是否重复。

LooseScan execution strategy (松散扫描):对于多条相同值索引,只取第一条查询记录,匹配成功后,把同索引均加入结果集。

Semi-join Materialization execution strategy(半连接物化策略):不想管子查询物化后连接查询

FirstMatch execution strategy (首次匹配):取一条外层查询的中的记录,然后到子查询的表中寻找符合匹配条件的记录,如果能找到一条,则将该外层查询的记录放入最终的结果集并且停止查找更多匹配的记录,如果找不到则把该外层查询的记录丢弃掉,重复上述过程

semi-join的适用条件:

子查询必须是和IN语句组成的布尔表达式,并且在外层查询的WHERE或者ON子句中出现。

外层查询也可以有其他的搜索条件,只不过和IN子查询的搜索条件必须使用AND连接起来。

该子查询必须是一个单一的查询,不能是由若干查询由UNION连接起来的形式。

该子查询不能包含GROUP BY或者HAVING语句或者聚集函数。

对于不能转换semi-join的子查询:

对于不相关子查询,可以将其物化后再参与查询。

不管是相关子查询还是不相关子查询,都可以将IN子查询转换为EXISTS子查询。

MySQL不相关子查询的优化方式多为子查询转连接

子查询结果相当于一个派生表,对于派生表的处理,优先尝试把派生表和外层查询合并掉,如果不行的话,再把派生表物化掉执行查询。

mysql搜索规则_MySQL基于规则优化相关推荐

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

    简介:MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行 ...

  2. 8核32g mysql性能_MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  3. mysql 更新索引_MySQL索引优化

    MySQL支持的索引类型 B-tree索引的特点 1.B-tree索引以B+树的结构存储数据 2.B-tree索引能够加快数据的查询速度 3.B-tree索引更适合进行行范围查找 B-tree结构图 ...

  4. mysql 分页_MySQL 如何优化大分页查询?

    一 背景 大部分开发和DBA同行都对分页查询非常非常了解,看帖子翻页需要分页查询,搜索商品也需要分页查询.那么问题来了,遇到上千万或者上亿的数据量怎么快速的拉取全量,比如大商家拉取每月千万级别的订单数 ...

  5. mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能

    MYSQL性能优化一直是个头痛的问题,目前大多都是直接把页面html静态页面或直接使用了缓存技术,下面我就mysql本身的性能优化来分享一下. 安装时优化参数配置提高服务性能 在Linux下安装Mys ...

  6. mysql数据库优化大全_MySQL数据库优化技巧大全

    简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...

  7. mysql索引查2遍_mysql索引优化查询

    一:mysql的引擎简介. 1.ISAM:查找速度快,不支持事物,如果硬盘崩溃则无法恢复. 2.MyISAM:是ISAM的扩展,在web中用的很多,读取速度快,,不支持事物. 3.InnoDB:Inn ...

  8. mysql 阿里云 优化_MySQL性能优化速记

    总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度. 在MySQL中,可 ...

  9. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)

    一 题记 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...

最新文章

  1. Ubuntu16.04中的可重定位目标文件
  2. Jewels and Stones
  3. 中国最后一个原始部落-农业大健康·万祥军:历史千年传承
  4. TCP 三次握手过程详解
  5. Storyboard中segue使用总结
  6. getOrDefault()和subList()
  7. php登录处理代码,php登录与退出登录实例代码
  8. systemctl命令完全指南
  9. 全文搜索引擎的比较-Lucene,Sphinx,Postgresql,MySQL?
  10. mysql之解决“mysql server has gone away“的问题
  11. P值计算(Excel)
  12. 【第109期】那碗“我拒绝”的毒鸡汤,坑了多少游戏策划?
  13. 【读万卷书】《挪威的森林》
  14. 汽车门把手的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 高薪运维经典企业版面试题汇总
  16. 【ElementUI】el-table 的表头和内容列不对齐
  17. 基因组层次聚类实战小案例
  18. 计算机专业学生常用的软件,盘点学生党必备高效实用软件
  19. 9.20-9.30面试总结
  20. Java富文本设置行间距,如何解决富文本设置行间距的单行带间距问题

热门文章

  1. 用Spring Boot复刻一款天猫商城,你可以做到!
  2. 这家公司不要求996,但照样市值万亿!
  3. 赠书:啥是指标陷阱?很多就出现在你的身边!
  4. SpringBoot + RabbitMQ (保证消息100%投递成功并被消费)
  5. BAT 招聘岗位 100%都考的知识,你精通了吗?
  6. powershell禁用计算机,PowerShell 因为在此系统中禁止执行脚本 解决方法
  7. python调用c++总结
  8. error C2039: IsOutRange
  9. pytorch判断NaN
  10. reid2019-2021