10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 36.3 mb
PDF (A4)- 36.4 mb
手册页(TGZ)- 237.6 kb
手册页(邮政编码)- 349.3 kb
信息(Gzip)- 3.4 mb
信息(邮政编码)- 3.4 mb
本手册节选

MySQL 5.7参考手册/.../ 优化InnoDB表的存储布局

8.5.1优化InnoDB表存储布局

  • 一旦数据达到稳定的大小,或者不断增长的表增加了几十兆或几百兆,就可以考虑使用优化表语句来重组表并压缩任何浪费的空间。重组后的表执行全表扫描所需的磁盘I/O更少。当改进索引使用或调优应用程序代码等其他技术不实用时,这是一种直接的技术,可以提高性能。

    优化表复制表的数据部分并重新构建索引。其好处在于改进了索引中的数据打包,减少了表空间和磁盘上的碎片。好处取决于每个表中的数据。您可能会发现,在某些方面有显著的改进,而在另一些方面则没有,或者在下次优化表之前,改进会随着时间的推移而减少。如果表很大,或者正在重建的索引不适合缓冲池,则此操作可能会很慢。向表中添加大量数据后的第一次运行通常比后面的运行慢得多。

  • InnoDB,有一个漫长的主键(无论是具有长值的单个列,还是形成长组合值的多个列)都会浪费大量磁盘空间。一行的主键值在指向同一行的所有辅助索引记录中重复。(见第14.6.2.1节“聚类和二级索引”)。创建一个AUTO_INCREMENT列作为主键(如果主键很长),或索引一个长的前缀VARCHAR而不是整个列。

  • 使用VARCHAR数据类型而不是字符存储可变长度的字符串或包含多个的列值。一个CHAR (N列总是N用于存储数据的字符,即使字符串较短或其值为.较小的表更适合缓冲池并减少磁盘I/O。

    当使用紧凑的行格式(默认InnoDB格式)和变长字符集,例如use utf8sjisCHAR (N列占用的空间是可变的,但至少仍然是N字节。

  • 对于较大或包含大量重复文本或数字数据的表,请考虑使用压缩行格式。将数据放入缓冲池或执行全表扫描所需的磁盘I/O更少。在做一个永久的决定之前,测量您可以使用的压缩量压缩紧凑的行格式。