MySQL 的统计直方图

1. 统计直方图

1.1. 概览

MySQL8.0实现了统计直方图。利用直方图,用户可以对一张表的一列做数据分布的统计,特别是针对没有索引的字段。这可以帮助查询优化器找到更优的执行计划。统计直方图的主要使用场景是用来计算字段选择性,即过滤效率。

可以通过以下方式来创建或者删除直方图:

-- 创建直方图统计
ANALYZE TABLE dept_emp UPDATE HISTOGRAM ON to_date [, to_date] WITH 100 BUCKETS;
-- 删除直方图统计
ANALYZE TABLE dept_emp DROP HISTOGRAM ON to_date [, col_name\];

buckets默认是100。统计直方图的信息存储在数据字典表"column_statistcs"中,可以通过视图information_schema.COLUMN_STATISTICS访问。直方图以灵活的JSON的格式存储。ANALYZE TABLE会基于表大小自动判断是否要进行取样操作。ANALYZE TABLE也会基于表中列的数据分布情况以及bucket的数量来决定是否要建立等宽直方图(singleton)还是等高直方图(equi-height)。

select * from information_schema.COLUMN_STATISTICS;
| employees   | dept_emp   | to_date     | {
  "buckets": [["1985-02-17", "1988-11-28", 0.009999909530372162, 1092], ["1988-11-29", "1990-06-17", 0.020011881677789403, 564], ["1990-06-18", "1991-08-16", 0.030005759899639026, 425], ["1991-08-17", "1992-08-08", 0.03999963812148865, 358], ["1992-08-09", "1993-06-05", 0.05001161026890589, 301], ["1993-06-06", "1994-03-04", 0.06000850414501678, 272], ["1994-03-05", "1994-11-08", 0.07000841367538894, 249], ["1994-11-09", "1995-06-16", 0.07998118231740968, 220], ["1995-06-17", "1996-01-04", 0.08999013881056564, 202], ["1996-01-05", "1996-07-11", 0.10002020488355051, 189], ["1996-07-12", "1997-01-02", 0.1099658326372198, 175], ["1997-01-03", "1997-06-14", 0.11998082043889832, 163], ["1997-06-15", "1997-11-15", 0.13003501174597334, 154], ["1997-11-16", "1998-04-07", 0.1399836551539039, 143], ["1998-04-08", "1998-08-19", 0.14997451772149226, 134], ["1998-08-20", "1998-12-25", 0.1599653802890806, 128], ["1998-12-26", "1999-04-28", 0.1700256029046782, 124], ["1999-04-29", "1999-08-22", 0.17999535589243765, 116], ["1999-08-23", "1999-12-08", 0.18995907757167457, 108], ["1999-12-09", "2000-03-25", 0.20002533149579468, 108], ["2000-03-26", "2000-07-11", 0.2100071471005992, 108], ["2000-07-12", "2000-10-27", 0.21999197835966502, 108], ["2000-10-28", "2001-02-16", 0.22999490354429844, 112], ["2001-02-17", "2001-06-10", 0.24003401658006712, 114], ["2001-06-11", "2001-09-30", 0.25000678522208786, 112], ["2001-10-01", "2002-01-22", 0.26000367909819877, 114], [

你可能感兴趣的:(MySQL,常用命令,日常维护,直方图,MySQL,优化,索引)