MySQL 5.7版本说明
一旦数据达到稳定的大小,或者不断增长的表增加了几十兆或几百兆,就可以考虑使用
优化表
语句来重组表并压缩任何浪费的空间。重组后的表执行全表扫描所需的磁盘I/O更少。当改进索引使用或调优应用程序代码等其他技术不实用时,这是一种直接的技术,可以提高性能。优化表
复制表的数据部分并重新构建索引。其好处在于改进了索引中的数据打包,减少了表空间和磁盘上的碎片。好处取决于每个表中的数据。您可能会发现,在某些方面有显著的改进,而在另一些方面则没有,或者在下次优化表之前,改进会随着时间的推移而减少。如果表很大,或者正在重建的索引不适合缓冲池,则此操作可能会很慢。向表中添加大量数据后的第一次运行通常比后面的运行慢得多。在
InnoDB
,有一个漫长的主键
(无论是具有长值的单个列,还是形成长组合值的多个列)都会浪费大量磁盘空间。一行的主键值在指向同一行的所有辅助索引记录中重复。(见第14.6.2.1节“聚类和二级索引”)。创建一个AUTO_INCREMENT
列作为主键(如果主键很长),或索引一个长的前缀VARCHAR
而不是整个列。使用
VARCHAR
数据类型而不是字符
存储可变长度的字符串或包含多个的列零
值。一个CHAR (
列总是N
)N
用于存储数据的字符,即使字符串较短或其值为零
.较小的表更适合缓冲池并减少磁盘I/O。当使用
紧凑的
行格式(默认InnoDB
格式)和变长字符集,例如use utf8
或sjis
,CHAR (
列占用的空间是可变的,但至少仍然是N
)N
字节。对于较大或包含大量重复文本或数字数据的表,请考虑使用
压缩
行格式。将数据放入缓冲池或执行全表扫描所需的磁盘I/O更少。在做一个永久的决定之前,测量您可以使用的压缩量压缩
与紧凑的
行格式。