返回顶部
首页 > 资讯 > 数据库 >MySQL基于规则优化
  • 329
分享到

MySQL基于规则优化

MySQL基于规则优化 2016-07-05 19:07:21 329人浏览 无得
摘要

条件化简:移除不必要括号、常熟传递、等值传递、移除无用条件、表达式计算、HAVING子句和WHERE子句合并、常量表检测 外连接消除:空值拒绝(外连接中通过where子句过滤NULL值),符合条件后,内外连接可以

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不相关子查询的优化方式多为子查询转连接

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

您可能感兴趣的文档:

--结束END--

本文标题: MySQL基于规则优化

本文链接: https://lsjlt.com/news/6145.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL基于规则优化
    条件化简:移除不必要括号、常熟传递、等值传递、移除无用条件、表达式计算、HAVING子句和WHERE子句合并、常量表检测 外连接消除:空值拒绝(外连接中通过where子句过滤NULL值),符合条件后,内外连接可以...
    99+
    2016-07-05
    MySQL基于规则优化
  • 基于mysql 默认排序规则的坑
    mysql默认varchar类型是对大小写不敏感(不区分),如果想要mysql区分大小写需要设置排序规则: utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。 utf8_genera_ci不区分大小...
    99+
    2022-05-26
    mysql 默认排序规则
  • MySQL索引优化规则是什么
    这篇文章将为大家详细讲解有关MySQL索引优化规则是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。今天mysql教程栏目为大家介绍MySQL的索引优化规则。前言索引的...
    99+
    2024-04-02
  • 网页基本性能优化规则有哪些
    小编给大家分享一下网页基本性能优化规则有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!针对浏览器网页的一些优化规则页面优化静态资源压缩借助构建工具(webpa...
    99+
    2023-06-08
  • 基于MySQL 的 SQL 优化总结
    在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务。例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率。 目前常用的 SQL 优化方式包括但不限于:业务层优化、SQL 逻辑优化、索引优化等。其中索...
    99+
    2017-06-28
    基于MySQL SQL 优化总结
  • oracle SQL优化规则有哪些
    这篇文章主要讲解了“oracle SQL优化规则有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle SQL优化规则有哪些”吧! 1>选...
    99+
    2024-04-02
  • 基于ElasticSearch Analyzer的使用规则详解
    analyzer的使用规则 查询只能查找倒排索引表中真实存在的项, 所以保证文档在索引时与查询字符串在搜索时应用相同的分析过程非常重要,这样查询的项才能够匹配倒排索引中的项。 尽管是...
    99+
    2024-04-02
  • 基于ElasticSearch Analyzer的使用规则是什么
    本文小编为大家详细介绍“基于ElasticSearch Analyzer的使用规则是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于ElasticSearch Analyzer的使用规则是什么”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-05
  • MySQL--索引优化原则
    索引优化原则 1、最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3...
    99+
    2024-04-02
  • 基于Luhn算法的银行卡校验规则
    目录案例:该校验的过程:运行结果:银行卡校验规则(Luhn算法)卡号位数数量说明:案例: 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个...
    99+
    2024-04-02
  • Mysql中基本语句优化的原则有哪些
    这篇文章给大家分享的是有关Mysql中基本语句优化的原则有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql基本语句优化原则一、尽量避免在列上运算,这样会导致索引失效s...
    99+
    2024-04-02
  • 基于Python代码实现Apriori 关联规则算法
    目录一、关联规则概述二、应用场景举例1、股票涨跌预测2、视频、音乐、图书等推荐3、打车路线预测(考虑时空)4、风控策略自动化挖掘三、3个最重要的概念1、支持度2、置信度3、提升度4、...
    99+
    2024-04-02
  • MySQL语句的优化原则
    这篇文章主要讲解了“MySQL语句的优化原则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL语句的优化原则”吧!1、使用索引来更快地遍历表。  缺省...
    99+
    2024-04-02
  • 基于成本的优化--CBO
    选择CBO的优化方式 默认条件下,CBO将SQL语句的吞吐量作为优化目标 三种不同的优化方式 ALL_ROWS :该优化方式是Oracle的默认模式,优化目标是实现查询的最大吞吐量 ...
    99+
    2024-04-02
  • MYSQL建表规则
    建立表规约 【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MySQL 在 Windows 下不区分大小写,但...
    99+
    2021-09-06
    MYSQL建表规则
  • MySql 排序规则
    1、MySQL的排序规则是干什么的? 我们在使用 Navicat for MySQL 或 MySQL Workbench 创建数据库的时候,除了数据库名称和字符集外,我们还可以设置 Collation【排序规则】 (当然我们也可以使用默认的...
    99+
    2023-08-31
    mysql 数据库 java
  • 从PMD工具的规则检测规则学习代码优化技巧有哪些
    这篇文章的内容主要围绕从PMD工具的规则检测规则学习代码优化技巧有哪些进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!讲起静态代码分析工具,估计大家耳...
    99+
    2023-06-17
  • Mysql慢查询优化方法及优化原则
    1、日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'【这样MYSQL会转换为...
    99+
    2024-04-02
  • SQL -- 基本书写规则
    1、SQL 语句要以分号;结尾 2、SQL 语句不区分大小写 SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。 提示:关键字是数据库事先定义的,有特别意义的单词。 虽然可以...
    99+
    2018-01-22
    SQL -- 基本书写规则 数据库入门 数据库基础教程 数据库 mysql
  • 高性能网站优化的规则有哪些
    这篇文章主要讲解了“高性能网站优化的规则有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“高性能网站优化的规则有哪些”吧!性能黄金法则:只有10%~20%的最终用户响应时间花在了下载HTM...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作