MySQL 8.0直方图

0. 什么是直方图

直方图(Histogram)是数据库提供的一种(索引之外的)基础统计信息,用于描述列上的数据分布情况。它最典型的场景是估算查询谓词的选择率,以便选择合适的执行计划。

也就是说,某个列可以不创建索引但创建直方图,也可以帮助提升查询效率。 MySQL 8.0开始支持直方图,这是个很大的进步。

直方图可以针对某个列记录其数据分布统计信息,例如有个列的值是从1到1万,那么可以利用直方图分成100个桶(bucket),每个桶中统计这1万个值是怎么分布的,以及每个桶中的最大值、最小值、占比等信息。

虽然可以利用索引优化SQL效率,但索引维护的代价更高,索引要保持更新,而直方图可以按需手动更新。

索引统计信息也有不可靠的时候,例如存在数据倾斜,或者统计延迟等问题。

另外,在有需要的时候,可以在每个有需要的列上创建直方图,但却不太可能同时创建多个单列索引,那样代价太高了。

例如下面这个执行计划:

[root@yejr.run]> explain select * from t1 where seq = 1234;
+------+---------------+------+---------+------+--------+----------+-------------+
| type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+------+---------------+------+---------+------+--------+----------+-------------+
| ALL  | NULL          | NULL | NULL    | NULL | 299876 |    10.00 | Using where |
+------+---------------+------+---------+------+--------+----------+-------------+

[root@yejr.run]> select * from t1 where seq = 1234;
Empty set (0.097 sec)

在还没创建直方图之前,seq列上同时也没有索引,这时是全表扫描,注意到 filtered 列的值是10%。

袁隆平院士给妈妈的信《妈妈,稻子熟了》

稻子熟了,妈妈,我来看您了。

本来想一个人静静地陪您说会话,安江的乡亲们实在是太热情了,天这么热,他们还一直陪着,谢谢他们了。

妈妈,您在安江,我在长沙,隔得很远很远。我在梦里总是想着您,想着安江这个地方。

解决GitHub官网打不开问题

GitHub经常打不开,或者打开特别慢,一种解决方案是 找到官网IP地址、CDN域名IP地址、静态资源IP地址,然后配置本机hosts文件,刷新DNS缓存即可。

查询三个域名的IP:

添加获取的对应IP地址到本地hosts文件

MacOS或Linux环境hosts文件路径/etc/hosts ; Windows环境是C:\Windows\System32\drivers\etc

以下是在MacOS或Linux环境下:

% sudo cat <<EOF>>/etc/hosts
# github.com
140.82.113.3 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.109.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
EOF

刷新DNS

% ipconfig /flushdns # in windows
% sudo systemctl restart network-manager # in Linux that use systemd as init
% sudo killall -HUP mDNSResponder # in MacOS