MySQL 5.6 SQL 优化特性

http://blog.chinaunix.net/uid-259788-id-4146363.html

http://www.cnblogs.com/Amaranthus/p/4028687.html   MYSQL 5.6手册

http://www.cnblogs.com/hustcat/category/214566.html   YY哥

http://blog.163.com/li_hx/blog/static/18399141320150253652874/ 那海蓝蓝

http://tech.it168.com/a2013/0506/1479/000001479749.shtml

http://www.server110.com/mariadb/201310/2245.html

1. mrr
   mrr_cost_based
       这个是从MySQL 5.6 开始增加的开关。  意思是针对普通索引把资源利用最大化,主要是针对多列索引,也叫组合索引来做基本扫描,然后对匹配的记录按照主键排序,这样按照有序的主键顺序从磁盘上扫描需要的全部记录。 根本功能是把对磁盘的随机扫描转化为顺序扫描。
主要针对的是数据太大,放不到CACHE里面(比如INNODB,或者MYISAM)。  目前对全索引扫描意义不大。

2. batched_key_access
(在JOIN BUFFER POOL里)当内表被扫描后,针对扫描到的记录,找到对应的主键值并且一次**给MRR接口。省掉了频繁跟磁盘交互的IO部分。

3. block_nested_loop
(在JOIN BUFFER POOL里)当内表被扫描后,针对原来的记录加上一个是否匹配标记,生成新的记录。这样下次外表的值如果再来遍历内表,就只扫描不匹配的即可。省掉部分CPU资源。

4. index_condition_pushdown
不开启: 对于组合索引(A,B)来说,如果A可以用到索引,B不能用到,那么只能在索引树上找到A,然后再用A对应的指针到磁盘上遍历数据。
开启后: 同样对于组合索引(A,B)来说,如果A可以用到索引,B不能用到,那么在索引树上找到A,然后再通过B的过滤条件在索引树上进行过滤,删选后的指针到磁盘上遍历数据。
但是ICP并不能把随机扫描变为顺序扫描,只是减少了对磁盘交互的IO部分。

http://blog.csdn.net/wang1518037965/article/details/46550807

5. use_index_extensions
主要用于INNODB的第二索引,也就是普通的索引,把索引中包含的主键值利用到。比如主键为(a,b),索引为(c). 如果用到了索引c,那么把索引变成(c,a,b) 这样,就可以用到新的组合索引了。
不过这种场合用的也比较少,一般是根据组合主键中的第一个字段和普通索引一起来做检索的时候。

6. semijoin
表示在连接的时候内表去重的过程 。
比如对以下的查询,a.class_id 就只需要扫描一次和b.id相同的记录就可以不在继续了。因为不需要关心b表里面是否有多少相同的class_id,只需要知道有还是没有就行了。
所以一般用在对子查询的优化居多。
http://www.cnblogs.com/xiaotengyi/p/3908347.html

http://www.linuxidc.com/Linux/2015-05/117523.htm

7. firstmatch
只选用内表的第一条与外表匹配的记录。

8. loosescan
把内表的数据基于索引分组,取每组第一条数据即可。

9. materialization
    subquery_materialization_cost_based
把内表去重然后生成有对应索引的临时表(有点类似其他数据中的物化视图),然后通过外表的对应键值遍历这张临时表。
主要针对不能抓华为半连接的检索类型。

时间: 2024-10-18 11:05:19

MySQL 5.6 SQL 优化特性的相关文章

【MySQL笔记】SQL优化利器 - explain命令的输出格式详解

有MySQL使用经验的同学在实际项目中可能会遇到SQL慢查询的场景,有些场景很容易定位问题所在(如单表操作有慢查询SQL时,仔细check SQL语句通常很容易定位索引问题),而有些复杂业务场景下(如多表联合查询几十个字段并做group或sort等操作),人工check SQL语句通常很难发现SQL瓶颈根源.这个时候,MySQL提供的explain命令就派上用场了. 本笔记主要对explain的输出结果做说明,并给出根据explain输出对SQL做优化的思路. 1. EXPLAIN语法及用途 e

MySQL专题3 SQL 优化

这两天去京东面试,面试官问了我一个问题,如何优化SQL 我上网查了一下资料,找到了不少方法,做一下记录 (一). 首先使用慢查询分析  通过Mysql 的Slow Query log 可以找到哪些SQL运行很慢.耗时间  在my.ini中: long_query_time=1 log-slow-queries=d:\mysql5\logs\mysqlslow.log 把超过1秒的记录在慢查询日志中 可以用mysqlsla来分析之.也可以在mysqlreport中,有如 DMS分别分析了selec

mysql 简单的sql优化示例[不定时更新]

对于慢sql的分析步骤: 1) desc|explain sql 查看执行计划, 对于type很慢的, 分析是否建立了对应字段的索引 2) 进行排除法, 把子查询抽离出来, 单独执行,定位慢查询是哪个子查询导致的. 专门进行优化. 脚本: CREATE TABLE stu ( id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键', NAME VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名称', phone

MySQL 学习四 SQL优化

MySQL逻辑架构: 第一层:客户端层,连接处理,授权认证,安全等功能.   第二层:核心层,查询解析,分析,优化,缓存,内置函数(时间,数学,加密),存储过程,触发器,视图   第三层:存储引擎.负责MySQL中数据的存储和提取. MySQL查询过程 客户端/服务端通信协议: 1 学习使用EXPLAIN ??? 2 创建正确的索引 数据库的索引像书的索引一样,他们的位置信息被保存,并且包含数据库的主要信息.可以使用EXPLAIN来查找 缺失的索引. 3 拒绝默认的设置:有三个关于MySQL性能

Mysql 分页查询sql优化

SELECT COUNT(id) FROM ts_translation_send_address EXPLAIN SELECT * FROM ts_translation_send_address ORDER BY id LIMIT 2000000,10; SELECT * from ts_translation_send_address t INNER JOIN ( SELECT ID FROM ts_translation_send_address ORDER BY id limit 20

浅谈SQL优化入门:2、等值连接和EXPLAIN(MySQL)

1.等值连接:显性连接和隐性连接 在<MySQL必知必会>中对于等值连接有提到两种方式,第一种是直接在WHERE子句中规定如何关联即可,那么第二种则是使用INNER JOIN关键字.如下例两种方式是"等同"的. //WHERE方式 SELECT vend_name, prod_name, prod_price, quantity FROM vendors, products, orderitems WHERE vendors.vend_id = products.vend_

mysql优化-数据库优化、SQL优化

我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `money` double(8,2) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_date` datetime(3) DEFAULT NULL

MySQL索引原理及SQL优化

原文:MySQL索引原理及SQL优化 目录 索引(Index) 索引的原理 b+树 MySQL如何使用索引 如何优化 索引虽好,不可滥用 如何验证索引使用情况? SQL优化 explain查询执行计划 id select_type table type possible_keys key key_len ref rows Extra 优化数据库结构 优化数据大小 优化数据类型 索引(Index) MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.索引的建立对

MySQL中的函数索引(Generated Column)及一次SQL优化

MySQL 中是没有 Oracle 的函数索引功能的,把 MySQL 的 Generated Column 称为"函数索引"并不准确,但可以和函数索引达到同样的效果,也有人把这个特性称为"衍生列". Generated Column 是什么 Generated Column 的值是根据其定义的表达式所计算而来的,下面使用官方文档中的例子做个简单介绍. 有一张表存储直角三角形的三条边长,大家都知道,根据直角三角形的边长公式,斜边的长度可以通过另外两条边长计算得到,这样