InnoDB采用按表空间(tablespace)的方式进行存储数据,默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file),用户可以通过参数innodb_data_file_path对其进行设置,可以有多个数据文件,如果没有设置innodb_file_per_table的话, 那些Innodb存储类型的表的数据都放在这个共享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存储引擎类型的表就会产生一个独立表空间。
那么独立表空间有哪些优劣呢?怎么去判断XX表是独立表空间还是共享表空间?
一、独立表空间优缺点
1. 优点:
(1) 每个表都有自已独立的表空间。
(2) 每个表的数据和索引都会存在自已的表空间中。
(3) 可以实现单表在不同的数据库中移动。
(4) 空间可以回收(除drop table操作处,表空不能自已回收)
2. 缺点
单表增加过大,如超过100个G。
二、判别数据表是独立表空间还是共享表空间
1. 通过ibd文件判别
如果表的存储引擎是InnoDB,而且表空间(tablespace)是共享表空间的话,那么数据库对应目录下面是没有"表名.ibd"文件的。独立表空间的表的话,则有"表名.ibd"文件。只是这个方法很笨,对于生产环境,大量的表通过这种方式判别,确实不是一个好方法。
- --innodb_file_per_table=1
- show variables like 'innodb_file_per_table';
- create table Independent_tablespace(name varchar(64));
- ls -lrt independent_tablespace.*
- --innodb_file_per_table=0
- show variables like 'innodb_file_per_table';
- create table common_tablespace(name varchar(64));
- ls -lrt independent_tablespace.*
2. INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES判别
MySQL 5.6的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 关于这个系统表提供了有关表格的格式和存储特性,包括行格式,压缩页面大小位级别的信息(如适用),INNODB的表空间信息。
- --共享表空间
- SELECT TABLE_SCHEMA
- ,TABLE_NAME
- ,TABLE_TYPE
- ,N'共享表空间' AS TABLE_SPACE
- ,ENGINE
- ,VERSION
- ,TABLE_ROWS
- ,AVG_ROW_LENGTH
- ,CREATE_TIME
- ,UPDATE_TIME
- FROM INFORMATION_SCHEMA.TABLES T
- LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
- WHERE I.NAME IS NULL AND T.TABLE_SCHEMA='HWB' AND T.ENGINE='InnoDB';
- --独立表空间
- SELECT TABLE_SCHEMA
- ,TABLE_NAME
- ,TABLE_TYPE
- ,N'独立表空间' AS TABLE_SPACE
- ,ENGINE
- ,VERSION
- ,TABLE_ROWS
- ,AVG_ROW_LENGTH
- ,CREATE_TIME
- ,UPDATE_TIME
- FROM INFORMATION_SCHEMA.TABLES T
- INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
- WHERE T.TABLE_SCHEMA='HWB' AND T.ENGINE='InnoDB';
3. INFORMATION_SCHEMA.INNODB_SYS_TABLES判别(推荐)
MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,不过其值全部为Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single与System 分别表示独立表空间和共享表空间。
- --独立表空间
- SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE SPACE_TYPE='Single';
- SELECT TABLE_SCHEMA
- ,TABLE_NAME
- ,TABLE_TYPE
- ,N'独立表空间' AS TABLE_SPACE
- ,ENGINE
- ,VERSION
- ,TABLE_ROWS
- ,AVG_ROW_LENGTH
- ,CREATE_TIME
- ,UPDATE_TIME
- FROM INFORMATION_SCHEMA.TABLES T
- INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
- WHERE T.TABLE_SCHEMA='HWB' AND T.ENGINE='InnoDB';
- --共享表空间
- SELECT TABLE_SCHEMA
- ,TABLE_NAME
- ,TABLE_TYPE
- ,N'共享表空间' AS TABLE_SPACE
- ,ENGINE
- ,VERSION
- ,TABLE_ROWS
- ,AVG_ROW_LENGTH
- ,CREATE_TIME
- ,UPDATE_TIME
- FROM INFORMATION_SCHEMA.TABLES T
- LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
- WHERE I.NAME IS NULL AND T.TABLE_SCHEMA='HWB' AND T.ENGINE='InnoDB';
最近在和团队规划OKR目标的时候,我们讨论了很多问题,我先抛砖引玉,列举了一些...
今天给大家分享四个在实际开发中,比较实用的SQL Server脚本函数,希望对大家能...
本文分享自华为云社区《 架构可视化支撑系统演进探索 》原文作者无名小溪。 随着...
Afrikaans:af Albanian:sq Basque:eu Belarusian:be Bulgarian:bg Catalan:ca Ch...
Eval 计算一个表达式的值并返回结果。 语法:[result = ]eval_r(expression_r) e...
一、导读 本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方...
Linux 发行版的爱好者们又有全新的 Linux 可以体验了,日前一款名为 TeLOS 的 Li...
如果你想对使用手机,平板电脑和辅助技术的用户隐藏某些内容,而只对键盘用户显...
一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用...
ajax传送json格式数据,关键是指定contentType,data要是json格式 如果是restful...