英文:
Where does MySQL store the information about which tablespace a table belongs to?
问题
MySQL 存储表属于哪个表空间的信息在数据字典中,您所描述的情况没有显示表所属表空间的信息,您是否遗漏了数据字典中的某个表格?
英文:
Where does MySQL store the information about which tablespace a table belongs to?
Ie: if I set city
table to be stored in ts2
tablespace:
alter table city tablespace ts2;
Show table status don't say anything about which tablespace this table belongs:
mysql> show table status where name = 'city'\G;
*************************** 1. row ***************************
Name: city
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 4150
Avg_row_length: 98
Data_length: 409600
Max_data_length: 0
Index_length: 81920
Data_free: 3145728
Auto_increment: 4080
Create_time: 2023-06-11 20:19:15
Update_time: NULL
Check_time: NULL
Collation: utf8mb4_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Neither information_schema.tables
mysql> select * from information_schema.tables where table_name = 'city'\G;
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: world
TABLE_NAME: city
TABLE_TYPE: BASE TABLE
ENGINE: InnoDB
VERSION: 10
ROW_FORMAT: Dynamic
TABLE_ROWS: 4150
AVG_ROW_LENGTH: 98
DATA_LENGTH: 409600
MAX_DATA_LENGTH: 0
INDEX_LENGTH: 81920
DATA_FREE: 3145728
AUTO_INCREMENT: 4080
CREATE_TIME: 2023-06-11 20:19:15
UPDATE_TIME: NULL
CHECK_TIME: NULL
TABLE_COLLATION: utf8mb4_general_ci
CHECKSUM: NULL
CREATE_OPTIONS:
TABLE_COMMENT:
1 row in set (0.00 sec)
Am I forgetting any table in the data dictionary?
答案1
得分: 1
表空间仅适用于InnoDB表,因此该属性位于INFORMATION_SCHEMA.INNODB_TABLES
中。
mysql> select name, space from INNODB_TABLES where name like 'test/%';
+-----------------+-------+
| name | space |
+-----------------+-------+
| test/table1 | 453 |
| test/table2 | 454 |
...
另请参阅 https://dev.mysql.com/doc/refman/8.0/en/innodb-information-schema-system-tables.html
自MySQL 8.0起,InnoDB数据字典存储有关诸如表空间之类的元数据。您不能直接查询数据字典,只能通过INFORMATION_SCHEMA间接查询。有关其他与数据字典相关的I_S视图,请参阅我提供的文档链接。
英文:
Tablespaces only applies to InnoDB tables, so this attribute is in INFORMATION_SCHEMA.INNODB_TABLES
.
mysql> select name, space from INNODB_TABLES where name like 'test/%';
+-----------------+-------+
| name | space |
+-----------------+-------+
| test/table1 | 453 |
| test/table2 | 454 |
...
See also https://dev.mysql.com/doc/refman/8.0/en/innodb-information-schema-system-tables.html
Since MySQL 8.0, the InnoDB data dictionary stores metadata about things like tablespaces. You can't query the data dictionary directly, you can only query it indirectly via the INFORMATION_SCHEMA. Refer to the documentation I linked to for other I_S views to the data dictionary.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论