加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL 8.0新特性之统计直方图

发布时间:2018-11-07 05:06:50 所属栏目:MySql教程 来源:韩杰·沃趣科技
导读:副标题#e# 【新品产上线啦】51CTO播客,随时随地,碎片化学习 概览 MySQL8.0实现了统计直方图。利用直方图,用户可以对一张表的一列做数据分布的统计,特别是针对没有索引的字段。这可以帮助查询优化器找到更优的执行计划。统计直方图的主要使用场景是用来

如果想要知道更多关于直方图统计的细节,可以使用trace:

  1. mysql> SET OPTIMIZER_TRACE = "enabled=on";  
  2. Query OK, 0 rows affected (0.00 sec)  
  3. mysql> SET OPTIMIZER_TRACE_MAX_MEM_SIZE = 1000000;  
  4. Query OK, 0 rows affected (0.00 sec)  
  5. mysql> EXPLAIN SELECT * FROM customer WHERE c_birth_day <= 20 AND c_birth_year = 1967;  
  6. mysql> SELECT JSON_EXTRACT(TRACE, "$**.filtering_effect") FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;  
  7. +----------------------------------------------------------------------------------------+  
  8. | JSON_EXTRACT(TRACE, "$**.filtering_effect")                                            |  
  9. +----------------------------------------------------------------------------------------+  
  10. | [[{"condition": "(`customer`.`c_birth_day` <= 20)", "histogram_selectivity": 0.6376}]] |  
  11. +----------------------------------------------------------------------------------------+  
  12. 1 row in set (0.00 sec) 

这里用了JSON_EXTRACT从trace里取出相关的部分。对于每个条件,直方图被使用的话,就会看到估算过的字段的选择性。在这个例子里,通过直方图,对“c_birth_day <= 20”条件,估算出63.76%的数据满足条件。事实上,与实际的数据分布情况基本一致:

  1. mysql> SELECT  
  2. ->   (SELECT count(*) FROM customer WHERE c_birth_day <= 20)  
  3. ->   /  
  4. ->   (SELECT COUNT(*) FROM customer) AS ratio;  
  5. +--------+  
  6. | ratio  |  
  7. +--------+  
  8. | 0.6376 |  
  9. +--------+  
  10. 1 row in set (0.03 sec) 

【编辑推荐】

  1. MySQL不为人知的主键与唯一索引约束
  2. 数据库ndf文件大小变为0KB如何进行数据恢复?
  3. 带你了解MySQL数据库小技巧
  4. 史上最全的MySQL高性能优化实战总结!
  5. 数据库为什么会分为“行式存储”和“列式存储”呢?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读