创建二级索引 idx_id,查看 sbtest1 表上主键索引与二级索引的数据量。mysql> create index idx_id on sbtest1(id);Query OK, 0 rows affected (12.97 sec)Records: 0 Duplicates: 0 Warnings: 0
mysql> SELECT sum(stat_value) pages ,index_name ,(round((sum(stat_value) * @@innodb_page_size)/1024/1024)) as MB FROM mysql.innodb_index_stats WHERE table_name = 'sbtest1' AND database_name = 'test' AND stat_description = 'Number of pages in the index' GROUP BY index_name;+-------+------------+------+| pages | index_name | MB |+-------+------------+------+| 72000 | PRIMARY | 1125 || 3492 | idx_id | 55 |+-------+------------+------+
重启 MySQL,再次查看缓冲区同样为空,证明没有缓存测试表上的数据。mysql> select * from sys.innodb_buffer_stats_by_table where object_schema = 'test';Empty set (1.49 sec)
mysql> select count(*) from test.sbtest1;+----------+| count(*) |+----------+| 5188434 |+----------+1 row in set (2.92 sec)
再次查看内存缓冲区,发现仅仅缓存了 sbtest1 表上的 50M 数据,约等于二级索引的数据量。mysql> select * from sys.innodb_buffer_stats_by_table where object_schema = 'test' \G;*************************** 1. row ***************************object_schema: test object_name: sbtest1 allocated: 49.48 MiB data: 46.41 MiB pages: 3167 pages_hashed: 0 pages_old: 1575rows_cached: 2599872
mysql> explain select count(*) from test.sbtest1 \G;*************************** 1. row *************************** id: 1 select_type: SIMPLE table: sbtest1 partitions: NULL type: indexpossible_keys: NULL key: idx_id key_len: 4 ref: NULL rows: 5117616 filtered: 100.00 Extra: Using index