MySQL内核月报 2014.10-MariaDB· 新鲜特性·ANALYZE statement 语法
MariaDB 10.1版本中新增加了一个 ANALYZE statement 命令。这个命令跟 EXPLAIN statement 命令类似,但不同的是, ANALYZE statement 命令调用优化器生成执行计划并且会真实的去执行语句,再用 EXPLAIN 的输出来替代结果集,并且 EXPLAIN 结果是实际语句执行中统计出来的。
这个语句可以让你检查优化器估算的执行计划代价和实际执行差多少。
命令的输出
我们可以看到 ANALYZE 命令多了r_rows和r_filterd两行,我们来比较一下 EXPLAIN 计算的 rows/filtered 和 ANALYZE 计算的 r_rows/r_filtered 两列的区别。
r_rows 是基于实际观察的 rows 列,它表示实际从表中读取了多少行数据。
r_filtered 是基于实际观察的 filtered 列,它表示经过应用WHERE条件之后还有百分之多少的数据剩余。
输出结果解析
让我们来看一个更复杂的SQL。
从上面的结果,我们可以获得如下信息:
对于 customer 表,customer.rows=149095, customer.r_rows=150000. 从这两个值来看,优化器对 customer 表的访问估算还是很准确的。
customer.filtered=18.08, customer.r_filtered=9.13. 优化器有点高估了`customer` 表所匹配的记录的条数。(一般来说,当你有个全表扫描,并且 r_filtered 少于15%的时候,你得考虑为表增加相应的索引了)
orders.filtered=100, orders.r_filtered=30.03. 优化器无法预估经过条件(orders.o_totalprice 200*1000)检查后还剩多少比例的记录。因此,优化器显示了100%。事实上,这个值是30%,通常来说30%的过滤性并不值得去建一个索引。但是对于多表Join,采集和使用列统计信息也许对查询有帮助,也可能帮助优化器选择更好的执行计划。(因为在关联中,关联条件和普通过滤条件组合以后,可能过滤性会非常好,并且有助于优化器判断哪张表做驱动表比较好)
然后我们再把前面的例子稍微修改一下
这里我们可以看到 orders.r_rows=NULL,以及 orders.r_filtered=NULL。这意味着 orders 表连一次都没有被扫描到。
核心特性—MySQL生态兼容 PolarDB-X将兼容MySQL以及周边生态作为核心设计目标之一。本文从SQL语法、事务行为、导入导出等维度总结了兼容性的相关特性。
db匠 rds内核团队秘密研发的全自动卖萌机. 追加特效: 发数据库内核月报. 月报传送: http://mysql.taobao.org/monthly/
相关文章
- mysql忘记密码修改方法
- 【MySQL】MySQL 5.6 参数之 extra_port
- oracl 、mysql在线查看文档
- MySQL忘记密码的正确解决方法
- MYSQL SHOW VARIABLES简介
- MySQL内核月报 2014.08-MariaDB·分支特性·支持大于16K的InnoDB Page Size
- MySQL内核月报 2014.08-MariaDB·分支特性·FusionIO特性支持
- MySQL内核月报 2014.09-MySQL· 捉虫动态·auto_increment
- MySQL内核月报 2014.09-MariaDB·主备复制·CREATE OR REPLACE
- MySQL内核月报 2014.10-MySQL· 功能改进·InnoDB Warmup特性
- MySQL内核月报 2014.11-TokuDB· 引擎特性· FAST UPDATES
- MySQL内核月报 2015.01-MySQL · 性能优化· Group Commit优化
- MySQL内核月报 2015.02-MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
- MySQL内核月报 2015.02-PgSQL · 特性分析· Replication Slot
- MySQL内核月报 2015.02-PgSQL · 特性分析· pg_prewarm
- MySQL内核月报 2015.02-MariaDB · 特性分析· Per-query variables
- MySQL内核月报 2015.03-MySQL · 答疑释惑· 并发Replace into导致的死锁分析
- MySQL内核月报 2015.03-MySQL · 捉虫动态· pid file丢失问题分析
- 数据库内核月报 - 2015 / 07-MySQL · 社区动态 · MySQL内存分配支持NUMA
- 数据库内核月报 - 2015 / 08-MySQL · 社区动态 · MySQL5.6.26 Release Note解读
- 数据库内核月报 - 2015 / 08-MySQL · 答疑解惑 · open file limits
- 数据库内核月报 - 2015 / 08-MySQL · 功能分析 · MySQL表定义缓存
- 数据库内核月报 - 2015 / 09-MySQL · 捉虫动态 · 建表过程中crash造成重建表失败
- 数据库内核月报 - 2015 / 09-MySQL · 特性分析 · 5.6 并行复制恢复实现
- paip.mysql 性能跟iops的以及硬盘缓存的关系
- mysql数据库(1):连接与断开服务器
- 云图说|云数据库MySQL内核小版本升级全攻略
- MySQL简单实现多字段模糊查询
- Windows下安装MySQLdb, Python操作MySQL数据库的增删改查
- MySQL_12_ShardingJDBC实现读写分离与分布式事务
- MySQL主从配置及mysqldump备份实战