| 
                         如果想要知道更多关于直方图统计的细节,可以使用trace: 
- mysql> SET OPTIMIZER_TRACE = "enabled=on";  
 - Query OK, 0 rows affected (0.00 sec)  
 - mysql> SET OPTIMIZER_TRACE_MAX_MEM_SIZE = 1000000;  
 - Query OK, 0 rows affected (0.00 sec)  
 - mysql> EXPLAIN SELECT * FROM customer WHERE c_birth_day <= 20 AND c_birth_year = 1967;  
 - mysql> SELECT JSON_EXTRACT(TRACE, "$**.filtering_effect") FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;  
 - +----------------------------------------------------------------------------------------+  
 - | JSON_EXTRACT(TRACE, "$**.filtering_effect")                                            |  
 - +----------------------------------------------------------------------------------------+  
 - | [[{"condition": "(`customer`.`c_birth_day` <= 20)", "histogram_selectivity": 0.6376}]] |  
 - +----------------------------------------------------------------------------------------+  
 - 1 row in set (0.00 sec) 
 
  
这里用了JSON_EXTRACT从trace里取出相关的部分。对于每个条件,直方图被使用的话,就会看到估算过的字段的选择性。在这个例子里,通过直方图,对“c_birth_day <= 20”条件,估算出63.76%的数据满足条件。事实上,与实际的数据分布情况基本一致: 
- mysql> SELECT  
 - ->   (SELECT count(*) FROM customer WHERE c_birth_day <= 20)  
 - ->   /  
 - ->   (SELECT COUNT(*) FROM customer) AS ratio;  
 - +--------+  
 - | ratio  |  
 - +--------+  
 - | 0.6376 |  
 - +--------+  
 - 1 row in set (0.03 sec) 
 
  
【编辑推荐】 
    - MySQL不为人知的主键与唯一索引约束
 
    - 数据库ndf文件大小变为0KB如何进行数据恢复?
 
    - 带你了解MySQL数据库小技巧
 
    - 史上最全的MySQL高性能优化实战总结!
 
    - 数据库为什么会分为“行式存储”和“列式存储”呢?
 
 
【责任编辑:庞桂玉 TEL:(010)68476606】 
            点赞 0                        (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |