可以在中创建压缩表file-per-table表空间或常规表空间.InnoDB表压缩不可用系统表空间. 系统表空间(空间0.ibdata文件)可以包含用户创建的表,但它也包含从不压缩的内部系统数据。因此,压缩只适用于每个表或常规表空间中存储在文件中的表(和索引)。
在每个表空间的文件中创建压缩表
要在每个表文件的表空间中创建一个压缩表,innodb\文件\每个\表
必须启用(默认设置)。您可以在MySQL配置文件中设置此参数(我的.cnf
或我的.ini
)或者动态地,使用套
声明。
之后innodb\文件\每个\表
选项,指定ROW_FORMAT =压缩
条款或密钥块大小
子句,或两者兼而有之创建表
或更改表格
语句在每个表空间的文件中创建压缩表。
例如,可以使用以下语句:
设置GLOBAL innodb\u file\u per\u table=1;创建表t1(c1 INT主键)行\格式=压缩键\块\大小=8;
在常规表空间中创建压缩表
要在常规表空间中创建压缩表,FILE_BLOCK_SIZE
必须为常规表空间定义,这是在创建表空间时指定的。这个FILE_BLOCK_SIZE
值必须是相对于innodb_page_size
值和压缩表的页大小,由创建表
或更改表格
密钥块大小
子句,必须等于文件\u块\u大小/1024
.例如,如果innodb\页面\大小=16384
和文件块大小=8192
,的密钥块大小
表中必须是8。有关更多信息,请参见第15.6.3.3节,“常规表空间”.
下面的示例演示如何创建常规表空间和添加压缩表。该示例假定为默认值innodb_page_size
16K的。这个FILE_BLOCK_SIZE
8192要求压缩表具有密钥块大小
的8。
mysql>创建表空间`ts2`添加数据文件`ts2.ibd'文件\块\大小=8192 Engine=InnoDB;mysql>创建表t4(c1 INT PRIMARY KEY)表空间ts2 ROW\u FORMAT=COMPRESSED KEY\u BLOCK\u SIZE=8;
笔记
从MySQL 8.0开始,压缩表的表空间文件是使用物理页大小而不是
InnoDB公司
page size,它使空压缩表的表空间文件的初始大小小于以前的MySQL版本。如果您指定
ROW_FORMAT =压缩
,你可以省略密钥块大小
; 这个密钥块大小
默认设置为innodb_page_size
价值观。如果指定有效的
密钥块大小
值,可以省略ROW_FORMAT =压缩
; 压缩将自动启用。以确定最佳的价值
键块大小,
通常,为同一个表创建多个具有不同值的副本,然后测量结果的大小.ibd
文件,并查看每个文件的性能如何工作量.对于通用表空间,请记住删除一个表不会减少通用表空间的大小.ibd
文件,也不会将磁盘空间返回到操作系统。有关详细信息,请参阅第15.6.3.3节,“常规表空间”.这个
密钥块大小
值被视为提示;可以使用不同的大小InnoDB公司
如果有必要的话)。对于每个表文件的表空间,则密钥块大小
只能小于或等于innodb_page_size
价值观。如果指定的值大于innodb_page_size
值,则忽略指定的值,发出警告,然后密钥块大小
设置为innodb_page_size
价值观。如果innodb\u strict\u mode=开
,指定无效的密钥块大小
值返回错误。对于常规表空间,有效密钥块大小
值取决于FILE_BLOCK_SIZE
表空间的设置。有关详细信息,请参阅第15.6.3.3节,“常规表空间”.InnoDB公司
支持32KB和64KB的页面大小,但这些页面大小不支持压缩。如需更多信息,请参阅innodb_page_size
10bet官方网站文档。的默认未压缩大小
InnoDB公司
数据页是16KB。根据选项值的组合,MySQL对表空间数据文件使用1KB、2KB、4KB、8KB或16KB的页面大小(.ibd
文件)。实际的压缩算法不受密钥块大小
价值观;该值确定每个压缩块的大小,进而影响每个压缩页中可以压缩的行数。在每个表空间的文件中创建压缩表时,设置
密钥块大小
等于InnoDB公司
页面大小通常不会导致太多的压缩。例如,设置键块大小=16
通常不会造成太大的压缩,因为InnoDB公司
页面大小为16KB。此设置可能仍然适用于具有许多长数据的表团
,瓦尔查尔
或文本
列,因为这样的值通常压缩得很好,因此可能需要更少的值溢出页中描述的第15.9.1.5节,“InnoDB表的压缩工作原理”. 对于常规表空间密钥块大小
值等于InnoDB公司
不允许页面大小。有关更多信息,请参见第15.6.3.3节,“常规表空间”.表的所有索引(包括聚集索引)使用相同的页大小进行压缩,如
创建表
或更改表格
声明。表属性,如行格式
和密钥块大小
不属于创建索引
语法InnoDB公司
表,如果指定,则忽略它们(尽管,如果指定,它们将出现在显示创建表
声明)。有关性能相关的配置选项,请参阅第15.9.1.3节,“InnoDB表的调谐压缩”.
对压缩表的限制
类中不能存储压缩表
InnoDB公司
系统表空间。通用表空间可以包含多个表,但是压缩表和未压缩表不能在同一个通用表空间中共存。
压缩应用于整个表及其所有关联索引,而不是单独的行,不管子句名称如何
行格式
.InnoDB公司
不支持压缩临时表。当innodb_strict_mode
已启用(默认值),创建临时表
如果返回错误ROW_FORMAT =压缩
或密钥块大小
已指定。如果innodb_strict_mode
则会发出警告,并使用非压缩行格式创建临时表。同样的限制也适用于更改表格
对临时表的操作。