• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 表压缩概述

    本节描述InnoDB表压缩,InnoDB驻留在 file_per_table 表空间或常规表空间中的表支持此压缩。使用ROW_FORMAT=COMPRESSED属性CREATE TABLE或启用表压缩ALTER TABLE

    因为处理器和高速缓存的速度比磁盘存储设备的速度增加了,所以许多工作负载都是磁盘绑定的。数据压缩以增加CPU利用率为代价,实现了较小的数据库大小,减少的I / O和改进的吞吐量。在具有足够RAM以便将经常使用的数据保留在内存中的系统上,压缩对于读取密集型应用程序特别有价值。

    使用InnoDB创建的表在磁盘上ROW_FORMAT=COMPRESSED使用的页面大小可以小于配置的innodb_page_size值。较小的页面需要更少的I / O来读取和写入磁盘,这对于SSD设备而言尤其有价值。

    压缩的页面大小通过CREATE TABLE或参数指定。不同的页面大小要求将表放置在每表文件表空间或常规表空间中,而不是系统表空间中,因为系统表空间无法存储压缩表。有关更多信息,请参见“每表文件表空间”和“常规表空间”。ALTER TABLEKEY_BLOCK_SIZE

    压缩级别是相同的,与KEY_BLOCK_SIZE值无关。当您为指定更小的值时KEY_BLOCK_SIZE,您将获得越来越小的页面的I / O好处。但是,如果指定的值太小,则当数据值无法充分压缩以适合每个页面中的多行时,将需要额外的开销来重组页面。KEY_BLOCK_SIZE根据表中每个索引的键列的长度,表的大小有一个严格的限制。指定的值太小,则CREATE TABLEor ALTER TABLE语句失败。

    在缓冲池中,压缩数据保存在小页面中,页面大小基于该KEY_BLOCK_SIZE值。为了提取或更新列值,MySQL还使用未压缩的数据在缓冲池中创建了未压缩的页面。在缓冲池中,对未压缩页面的任何更新也将重新写回到等效的压缩页面。您可能需要调整缓冲池的大小以容纳压缩和未压缩页面的其他数据,尽管需要空间时会从缓冲池中清除未压缩的页面,然后在下次访问时再次将其解压缩。

    下篇:创建压缩表