如果想要知道更多关于直方图统计的细节,可以使用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 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|