MYsql优化where子句
该部分讨论where子句的优化,不仅select之中,相同的优化同样试用与delete 和update语句中的where子句;
1: 移去不必要的括号:
((a AND b) AND c OR (((a AND b) AND (c AND d)))) -> (a AND b AND c) OR (a AND b AND c AND d)
2:常量合并:
(a<b AND b=c) AND a=5 -> b>5 AND b=c AND a=5
3:常量条件去除:
(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6) -> B=5 OR B=6
4:indexes 常量表达式只被计算一次:
5:没有where 条件的 单表 Count(*)直接检索Information_schema库中的统计信息(对 myisam 和 memory表)。
6:更早的察觉无效的常量表达式。mysql快速发现select语句中不可能成立的where条件并且返回no rows;
7: 如果没有使用group by 或者聚合函数(count(),min().max()),having子句会被合并到where 子句中;
8:做链接的每个table,一个快速的where子句构造原则是尽可能的跳过更多的行;
9:查询中,所有 constant table 都在其他表之前读取,constant table 定义如下:
1.1 : 一个空表或者只有一行数据的表;
1.2: 一个以主键 或唯一索引为 where条件子句的表,并且所有的Index部分都是和常量表达式比较,不为null(unique index 可能包含多个null);
SELECT * FROM t WHERE primary_key=1; SELECT * FROM t1,t2WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
10: 通过尝试所有可能性,找到最好的表join组合情况,如果order by子句和group by 子句中的所有列都来至同一张表,那么该表在join时优先read;
11:如果order by子句和 group by子句不同,或者order by Or group by 包含不在查询队列第一张表的中的列,那么会创建 temporary table;
12: 优化器如果认为使用index 会比表scan 更高效,则会选择使用index,scan表会被使用,如果最好的index需要scan多于30%的表记录,但是一个固定的比例不会确定使用table scan或者走index,优化器更加复杂,根据在额外的因数,eg:表的大小,行数,block快的大小;
13: 有些情况下,mysql 可以读取Index 数据而不必回访data file(base table)(索引覆盖);
下面的快速例子:
SELECT COUNT(*) FROM tbl_name;SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;SELECT MAX(key_part2) FROM tbl_nameWHERE key_part1=constant;SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... LIMIT 10;
SELECT ... FROMtbl_name
ORDER BYkey_part1
DESC,key_part2
DESC, ... LIMIT 10;
以下是mysql只查询 index B-Tree,假设index 列值为数值型:
SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;SELECT COUNT(*) FROM tbl_nameWHERE key_part1=val1 AND key_part2=val2;SELECT key_part2 FROM tbl_name GROUP BY key_part1;
以下是用index来避免Filesort
SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... ;SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... ;
转载于:https://www.cnblogs.com/onlysun/p/4516756.html
MYsql优化where子句相关推荐
- 8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句
8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句本节讨论优化用于处理WHERE子句, 例子是使用SELECT 语句,但是相同的优化应 ...
- MySQL 优化 —— WHERE 子句优化
引言 本文翻译自 MySQL 官网:WHERE Clause Optimization WHERE 子句优化 这一部分我们来讨论对 WHERE 子句的优化处理.本部分的案例都是以 SELECT 语句为 ...
- MySQL优化—工欲善其事,必先利其器之EXPLAIN
mysql explain命令是查询性能优化不可缺少的一部分. explain output columns 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或者关联查询, ...
- 项目中常用的19条MySQL优化
声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...
- MySQL优化系列(二)--查找优化(1)(非索引设计)
MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...
- 项目中常用的 19 条 MySQL 优化总结
作者:zhangqh 地址:segmentfault.com/a/1190000012155267 本文总结了19条关于Mysql的优化方案,本文的优化方案都是基于 " Mysql-索引-B ...
- mysql优化篇_MySQL优化篇-查询优化
可以参考一下官方文档中的解释. 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. ...
- mysql 优化表 3000万_mysql优化:专题三、关于单表查询,可以这么优化
mysql优化:专题三.关于单表查询,可以这么优化 作者:PHPYuan 时间:2018-10-18 03:41:26 上篇讲解了「mysql优化专题」90%程序员都会忽略的增删改优化(2),相信大家 ...
- WEB程序员需要掌握的十大MySQL优化技巧
WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题.希望本文能对大家掌握MySQL优化技巧有所帮助. 1.优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高 ...
最新文章
- LeetCode刷题记录13——705. Design HashSet(easy)
- python使用imbalanced-learn的SMOTEN方法进行上采样处理数据不平衡问题
- 设计模式03------单例模式
- 二 Java开发环境搭建
- freebsd java 能用吗_在FreeBSD 4.9下安装JAVA环境
- 汲取Linux灵感 Pivotal开源大数据套件
- java 中random类使用_Python中random的使用方法
- coreos安装php,window_win10系统运行wps无响应的解决方案,wps是我们在日常办公中经常会 - phpStudy...
- PHP 对象 多态性
- [.NET开发] NPOI导出
- Mac M1芯片安装打开Axure9
- C语言中期报告模板,学院毕业设计(论文)中期报告模板
- github下载慢的两种解决方式
- ckeditor引入
- WRF主程序与WPS的编译与安装
- 如何在微信中(微信公众号页面)给Vue单页应用设置标题
- 乐理知识(和弦相关)
- 数学与计算机科学奖视频马化腾,首届未来科学大奖揭晓 马化腾李彦宏都来颁奖了...
- Myricetin/Myricitrin 杨梅素/杨梅苷98%,杨梅提取物
- Autodesk AutoCAD Mac版卸载教程
热门文章
- c++ -- 构造函数与析构函数
- 用ul和li实现表格table效果 (转)
- python update()
- hdu 6148 数位dp
- hdu4756 最小树+树形dp
- 操作系统原理第五章:CPU调度
- 【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
- 【Groovy】map 集合 ( 根据 Key 获取 map 集合中对应的值 | map.Key 方式 | map.‘Key’ 方式 | map[‘Key’] 方式 | 代码示例 )
- 【计算机网络】网络安全 : 防火墙 ( 简介 | 防火墙功能 | 防火墙分类 | 分组过滤路由器 | 应用网关 )