千家信息网

MySQL中怎么判断InnoDB表是独立表空间还是共享表空间

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,MySQL中怎么判断InnoDB表是独立表空间还是共享表空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、独立表空间优缺点1. 优点
千家信息网最后更新 2024年10月19日MySQL中怎么判断InnoDB表是独立表空间还是共享表空间

MySQL中怎么判断InnoDB表是独立表空间还是共享表空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、独立表空间优缺点

1. 优点:

(1) 每个表都有自已独立的表空间。

(2) 每个表的数据和索引都会存在自已的表空间中。

(3) 可以实现单表在不同的数据库中移动。

(4) 空间可以回收(除drop table操作处,表空不能自已回收)

  • Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。

  • 对于使innodb-plugin的Innodb使用turncate 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';

看完上述内容,你们掌握MySQL中怎么判断InnoDB表是独立表空间还是共享表空间的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

空间 独立 数据 判别 方法 还是 文件 信息 内容 字段 数据库 更多 格式 问题 存储 不同 束手无策 不能自已 为此 不用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公文机器人rpa软件开发公司 宝山区加工软件开发常见问题 软件开发服务和软件维护服务 最新软件开发工具排名 在网络安全法中规定关键信息 访问服务器时结果为空怎么回事 信息化建设《网络安全法》 定制软件开发利润多少比较合理 常州品质软件开发售后服务 做好网络安全防范工作 软件开发团队成员介绍 网络安全联盟自律协议 网络安全有害的例子 服务器装ubuntu系统问题 长沙澳博软件开发有限公司 收银 信息技术中的网络技术 互联网对科技发展的积极 小区监控服务器紧急维修 树立牢固的网络安全意识 数据库为什么用嵌套查询 企业级软件开发语言 linux服务器管理和维护 坦克世界抗战服务器 如何写软件开发案例分析 多群转播软件开发 浦东新区微型网络技术服务 服务器层次 网络安全保密内容 域名绑定自己的服务器 日常网络安全教育知识内容
0