innoDB数据收集方式—性&非性(四十三)

2023-02-02 00:00:00 索引 数据 统计 页面 统计数据

上篇文章说了连接查询的成本,主要由驱动表的扇出值和被驱动表的查询方法决定,而成本这些都是可以在%cost%表查看的,因为分为server和engine表,server不管理数据成本,里面包含连接管理,查询缓存,sql解码,sql优化,engine就是数据引擎成本,而distinct,union等特殊查询,会建立临时表,临时表看数据量可能建立磁盘或者内存,比如distinct会用unique索引建立临时表去重。

我们前面说了show index from可以看到表的索引信息,show table status可以看到表的数据,那这些数据怎么来的呢?分为两种不同的统计数据方式。

两种不同的统计数据存储方式

innoDB_stats_persistent字段,在mysql5.6.6之前是OFF,代表默认吧统计数据存储在内存中,在之后是on,默认吧数据存储在磁盘上。

innoDB默认以表为单位存储数据,所以在建立表的时候我们可以指定存储在磁盘还是存储在内存,当指定为stats_persistent为1时,代表性存储,当stats_persistent为0时,为内存存储。当没有指定的时候,默认用innoDB_stats_persistent值。

CREATE TABLE 表名 (...) Engine=InnoDB, STATS_PERSISTENT = (1|0);

ALTER TABLE 表名 Engine=InnoDB, STATS_PERSISTENT = (1|0);

性统计:

表示统计数据存储在磁盘上,服务器重启之后这些数据还在

我们可以查询数据库:

mysql> show tables from mysql like 'innodb%';
+---------------------------+
| Tables_in_mysql (innodb%) |
+---------------------------+
| innodb_index_stats        |
| innodb_table_stats        |
+---------------------------+
2 rows in set (0.00 sec)

相关文章