我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL基于规则优化

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL基于规则优化

MySQL基于规则优化

  1. 条件化简:移除不必要括号、常熟传递、等值传递、移除无用条件、表达式计算、HAVING子句和WHERE子句合并、常量表检测
  2. 外连接消除:空值拒绝(外连接中通过where子句过滤NULL值),符合条件后,内外连接可以互相转换,优化器可以评估表的不同连接顺序降低查询成本
  3. 子查询优化: 按返回的结果集不同子查询分为标量子查询(查询单一值)、行子查询、列子查询和表子查询 按与外层查询关系分为不相关子查询(子查询不依赖外层查询结果)和相关子查询 子查询在布尔表达式的使用:
  4. 对于<、>、=之类操作符来说,子查询只能是标量子查询或行子查询
  5. 对于[NOT] IN(判断某个操作数是否在某个子查询结果集中)/ANY/SOME (只要子查询结果集中存在某个值和给定操作数比较为true,则表达式为true)/ALL(操作数必须与结果集全部匹配)来说,子查询是一个集合
  6. EXIST,仅需要判断子查询是否有记录。

注:

  1. 子查询必须用小括号扩起来。
  2. 在SELECT子句中的子查询必须是标量子查询。
  3. 在想要得到标量子查询或者行子查询,但又不能保证子查询的结果集只有一条记录时,应该使用LIMIT 1语句来限制记录数量。
  4. 对于[NOT] IN/ANY/SOME/ALL子查询来说,子查询中不允许有LIMIT语句。
  5. ORDER BY子句、DISTINCT语句以及没有聚集函数以及HAVING子句的GROUP BY子句在子查询中无意义,查询优化器会直接删除。
  6. 不允许在一条语句中增删改某个表的记录时同时还对该表进行子查询。

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

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

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

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

  1. Table pullout (子查询中的表上拉):子查询查询条件只有主键或唯一索引时,转连接查询。
  2. DuplicateWeedout execution strategy (重复值消除):加入结果集前,尝试加入到只包含主键的临时表,根据能否插入判断是否重复。
  3. LooseScan execution strategy (松散扫描):对于多条相同值索引,只取第一条查询记录,匹配成功后,把同索引均加入结果集。
  4. Semi-join Materialization execution strategy(半连接物化策略):不想管子查询物化后连接查询
  5. FirstMatch execution strategy (首次匹配):取一条外层查询的中的记录,然后到子查询的表中寻找符合匹配条件的记录,如果能找到一条,则将该外层查询的记录放入最终的结果集并且停止查找更多匹配的记录,如果找不到则把该外层查询的记录丢弃掉,重复上述过程

semi-join的适用条件:

  1. 子查询必须是和IN语句组成的布尔表达式,并且在外层查询的WHERE或者ON子句中出现。
  2. 外层查询也可以有其他的搜索条件,只不过和IN子查询的搜索条件必须使用AND连接起来。
  3. 该子查询必须是一个单一的查询,不能是由若干查询由UNION连接起来的形式。
  4. 该子查询不能包含GROUP BY或者HAVING语句或者聚集函数。

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

  1. 对于不相关子查询,可以将其物化后再参与查询。
  2. 不管是相关子查询还是不相关子查询,都可以将IN子查询转换为EXISTS子查询。

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL基于规则优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL基于规则优化

条件化简:移除不必要括号、常熟传递、等值传递、移除无用条件、表达式计算、HAVING子句和WHERE子句合并、常量表检测外连接消除:空值拒绝(外连接中通过where子句过滤NULL值),符合条件后,内外连接可以互相转换,优化器可以评估表的不同连接顺序降低查询成
MySQL基于规则优化
2016-07-05

基于mysql 默认排序规则的坑

mysql默认varchar类型是对大小写不敏感(不区分),如果想要mysql区分大小写需要设置排序规则: utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。 utf8_genera_ci不区分大小写,ci为case in
2022-05-26

网页基本性能优化规则有哪些

小编给大家分享一下网页基本性能优化规则有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!针对浏览器网页的一些优化规则页面优化静态资源压缩借助构建工具(webpa
2023-06-08

基于MySQL 的 SQL 优化总结

在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务。例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率。目前常用的 SQL 优化方式包括但不限于:业务层优化、SQL 逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到
基于MySQL 的 SQL 优化总结
2017-06-28

基于ElasticSearch Analyzer的使用规则是什么

本文小编为大家详细介绍“基于ElasticSearch Analyzer的使用规则是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于ElasticSearch Analyzer的使用规则是什么”文章能帮助大家解决疑惑,下面跟着小编的
2023-06-05

MySQL中字符集与校对规则的选择与优化

在MySQL中,字符集和校对规则是影响数据库性能和数据一致性的重要因素。选择合适的字符集和校对规则可以提高数据的存储效率、查询效率和一致性。以下是关于如何在MySQL中选择和优化字符集与校对规则的建议:选择合适的字符集:根据应用程序的需求选
MySQL中字符集与校对规则的选择与优化
2024-10-21

Linux主机防火墙规则优化技巧

在Linux系统中,防火墙规则优化是确保系统安全的关键步骤。以下是一些优化技巧,帮助你提升防火墙的性能和安全性:禁用不必要的服务和端口通过审查系统中运行的服务和端口,禁用不必要的服务和关闭不需要的端口,可以减少系统的攻击面和提高性能。使用
Linux主机防火墙规则优化技巧
2024-09-27

从PMD工具的规则检测规则学习代码优化技巧有哪些

这篇文章的内容主要围绕从PMD工具的规则检测规则学习代码优化技巧有哪些进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!讲起静态代码分析工具,估计大家耳
2023-06-17

高性能网站优化的规则有哪些

这篇文章主要讲解了“高性能网站优化的规则有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“高性能网站优化的规则有哪些”吧!性能黄金法则:只有10%~20%的最终用户响应时间花在了下载HTM
2023-06-08

编程热搜

目录