• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • myisampack 生成压缩的只读MyISAM表

    的myisampack工具压缩MyISAM表。myisampack通过分别压缩表中的每一列来工作。通常,myisampack将数据文件打包40%到70%。

    以后使用该表时,服务器会将解压缩列所需的信息读入内存。当访问单个行时,这将导致更好的性能,因为您只需要精确地解压缩一行即可。

    MySQL mmap()尽可能在压缩表上使用内存映射。如果mmap()不起作用,MySQL将恢复到正常的读/写文件操作。

    请注意以下事项:

    • 如果在禁用外部锁定的情况下调用了mysqld服务器,如果在打包过程中服务器可能更新了表,则调用myisampack不是一个好主意。在服务器停止的情况下压缩表是最安全的。
    • 打包表后,它变为只读。这通常是有意的(例如,访问CD上的打包表时)。
    • myisampack不支持分区表。

    像这样调用myisampack

    shell>myisampack [options] file_name ...
    

    每个文件名参数应为索引(.MYI)文件的名称。如果您不在数据库目录中,则应指定文件的路径名。可以省略.MYI扩展名。

    使用myisampack压缩表后,使用myisamchk -rq重建其索引。“myisamchk-MyISAM表维护实用程序”。

    myisampack支持以下选项。它还会读取选项文件,并支持“影响选项文件处理的命令行选项”中所述的处理选项的选项。

    • --help-?

      显示帮助消息并退出。

    • --backup-b

      使用名称备份每个表的数据文件tbl_name.OLD

    • --character-sets-dir=dir_name

      字符集的安装目录。请参见“字符集配置”。

    • --debug[=debug_options]-#[debug_options]

      编写调试日志。典型的debug_options字符串是。默认值为。d:t:o,file_named:t:o

      仅当MySQL是使用构建的时,此选项才可用WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。

    • --force-f

      即使压缩表变得大于原始表,或者存在来自myisampack的较早调用的中间文件,也要生成压缩表。(myisampacktbl_name.TMD在压缩表时会在数据库目录中创建一个中间文件。如果您杀死myisampack,则该.TMD文件可能不会被删除。)通常,myisampack如果发现tbl_name.TMD存在退出并返回错误。使用--forcemyisampack仍然可以打包表格。

    • --join=big_tbl_name-j big_tbl_name

      将在命令行上命名的所有表连接到一个打包表中big_tbl_name。所有要合并的表必须具有相同的结构(相同的列名和类型,相同的索引等等)。

      big_tbl_name在加入操作之前不能存在。要在命令行中命名的所有源表都big_tbl_name必须存在。读取源表以进行联接操作,但不对其进行修改。

    • --silent-s

      静音模式。仅在发生错误时才写输出。

    • --test-t

      实际不打包桌子,只需测试打包。

    • --tmpdir=dir_name-T dir_name

      使用命名目录作为myisampack创建临时文件的位置。

    • --verbose-v

      详细模式。编写有关打包操作进度及其结果的信息。

    • --version-V

      显示版本信息并退出。

    • --wait-w

      等待并重试该表是否正在使用。如果在禁用外部锁定的情况下调用了mysqld服务器,如果在打包过程中服务器可能更新了表,则调用myisampack不是一个好主意。

    以下命令序列说明了典型的表压缩会话:

    shell>ls -l station.*
    -rw-rw-r-- 1 jones my 994128 Apr 17 19:00 station.MYD
    -rw-rw-r-- 1 jones my 53248 Apr 17 19:00 station.MYI
    
    shell>myisamchk -dvv station
    
    MyISAM file: station
    Isam-version: 2
    Creation time: 1996-03-13 10:08:58
    Recover time: 1997-02-02 3:06:43
    Data records: 1192 Deleted blocks: 0
    Datafile parts: 1192 Deleted dat : 0
    Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2
    Max datafile length: 54657023 Max keyfile length: 33554431
    Recordlength: 834
    Record format: Fixed length
    
    table description:
    Key Start Len Index Type Root Blocksize Rec/key
    1 2  4 unique unsigned long 1024 1024 1
    2 32 30 multip. text 10240 1024 1
    
    Field Start Length Type
    1 1  1
    2 2  4
    3 6  4
    4 10 1
    5 11 20
    6 31 1
    7 32 30
    8 62 35
    9 97 35
    10 132 35
    11 167 4
    12 171 16
    13 187 35
    14 222 4
    15 226 16
    16 242 20
    17 262 20
    18 282 20
    19 302 30
    20 332 4
    21 336 4
    22 340 1
    23 341 8
    24 349 8
    25 357 8
    26 365 2
    27 367 2
    28 369 4
    29 373 4
    30 377 1
    31 378 2
    32 380 8
    33 388 4
    34 392 4
    35 396 4
    36 400 4
    37 404 1
    38 405 4
    39 409 4
    40 413 4
    41 417 4
    42 421 4
    43 425 4
    44 429 20
    45 449 30
    46 479 1
    47 480 1
    48 481 79
    49 560 79
    50 639 79
    51 718 79
    52 797 8
    53 805 1
    54 806 1
    55 807 20
    56 827 4
    57 831 4
    
    shell>myisampack station.MYI
    Compressing station.MYI: (1192 records)
    - Calculating statistics
    
    normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11
    pre-space: 0 end-space: 12 table-lookups: 5 zero: 7
    Original trees: 57 After join: 17
    - Compressing file
    87.14%
    Remember to run myisamchk -rq on compressed tables
    
    shell>myisamchk -rq station
    - check record delete-chain
    - recovering (with sort) MyISAM-table 'station'
    Data records: 1192
    - Fixing index 1
    - Fixing index 2
    
    shell>mysqladmin -uroot flush-tables
    
    shell>ls -l station.*
    -rw-rw-r-- 1 jones my 127874 Apr 17 19:00 station.MYD
    -rw-rw-r-- 1 jones my 55296 Apr 17 19:04 station.MYI
    
    shell>myisamchk -dvv station
    
    MyISAM file: station
    Isam-version: 2
    Creation time: 1996-03-13 10:08:58
    Recover time: 1997-04-17 19:04:26
    Data records: 1192 Deleted blocks: 0
    Datafile parts: 1192 Deleted dat : 0
    Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1
    Max datafile length: 16777215 Max keyfile length: 131071
    Recordlength: 834
    Record format: Compressed
    
    table description:
    Key Start Len Index Type Root Blocksize Rec/key
    1 2  4 unique unsigned long 10240 1024 1
    2 32 30 multip. text 54272 1024 1
    
    Field Start Length Type Huff tree Bits
    1 1  1 constant 1  0
    2 2  4 zerofill(1) 2 9
    3 6  4 no zeros, zerofill(1) 2 9
    4 10 1  3 9
    5 11 20 table-lookup 4  0
    6 31 1  3 9
    7 32 30 no endspace, not_always 5  9
    8 62 35 no endspace, not_always, no empty 6  9
    9 97 35 no empty 7  9
    10 132 35 no endspace, not_always, no empty 6  9
    11 167 4  zerofill(1) 2 9
    12 171 16 no endspace, not_always, no empty 5  9
    13 187 35 no endspace, not_always, no empty 6  9
    14 222 4  zerofill(1) 2 9
    15 226 16 no endspace, not_always, no empty 5  9
    16 242 20 no endspace, not_always 8  9
    17 262 20 no endspace, no empty 8  9
    18 282 20 no endspace, no empty 5  9
    19 302 30 no endspace, no empty 6  9
    20 332 4  always zero 2  9
    21 336 4  always zero 2  9
    22 340 1  3 9
    23 341 8  table-lookup 9  0
    24 349 8  table-lookup 10 0
    25 357 8  always zero 2  9
    26 365 2  2 9
    27 367 2  no zeros, zerofill(1) 2 9
    28 369 4  no zeros, zerofill(1) 2 9
    29 373 4  table-lookup 11 0
    30 377 1  3 9
    31 378 2  no zeros, zerofill(1) 2 9
    32 380 8  no zeros 2  9
    33 388 4  always zero 2  9
    34 392 4  table-lookup 12 0
    35 396 4  no zeros, zerofill(1) 13 9
    36 400 4  no zeros, zerofill(1) 2 9
    37 404 1  2 9
    38 405 4  no zeros 2  9
    39 409 4  always zero 2  9
    40 413 4  no zeros 2  9
    41 417 4  always zero 2  9
    42 421 4  no zeros 2  9
    43 425 4  always zero 2  9
    44 429 20 no empty 3  9
    45 449 30 no empty 3  9
    46 479 1  14 4
    47 480 1  14 4
    48 481 79 no endspace, no empty 15 9
    49 560 79 no empty 2  9
    50 639 79 no empty 2  9
    51 718 79 no endspace 16 9
    52 797 8  no empty 2  9
    53 805 1  17 1
    54 806 1  3 9
    55 807 20 no empty 3  9
    56 827 4  no zeros, zerofill(2) 2 9
    57 831 4  no zeros, zerofill(1) 2 9
    

    myisampack显示以下类型的信息:

    • normal

      不使用额外填料的列数。

    • empty-space

      包含仅空格的值的列数。这些占一点。

    • empty-zero

      包含仅二进制零值的列数。这些占一点。

    • empty-fill

      不占据其类型的完整字节范围的整数列数。这些更改为较小的类型。例如,如果BIGINT列(八个字节)的TINYINT所有值都在从-128到的范围内,则可以将其存储为列(一个字节)127

    • pre-space

      用前导空格存储的小数列数。在这种情况下,每个值都包含前导空格数的计数。

    • end-space

      具有大量尾随空格的列数。在这种情况下,每个值都包含一个尾随空格数的计数。

    • table-lookup

      该列只有少数几个不同的值,这些值被转换为ENUM霍夫曼压缩之前的值。

    • zero

      所有值均为零的列数。

    • Original trees

      霍夫曼树的初始数量。

    • After join

      加入树后为了节省头空间而剩下的不同霍夫曼树的数量。

    压缩表后Fieldmyisamchk -dvv显示的行包括有关每列的其他信息:

    • Type

      数据类型。该值可以包含以下任何描述符:

      • constant

        所有行具有相同的值。

      • no endspace

        不要存储末端空间。

      • no endspace, not_always

        不要存储所有空格,也不要对所有值进行空格压缩。

      • no endspace, no empty

        不要存储末端空间。不要存储空值。

      • table-lookup

        该列已转换为ENUM

      • zerofill(N)

        N值中的最高有效字节始终为0,并且不存储。

      • no zeros

        不要存储零。

      • lways zero

        零值使用一位存储。

    • Huff tree

      与列关联的霍夫曼树的编号。

    • Bits

      霍夫曼树中使用的位数。

    运行myisampack之后,使用myisamchk重新创建任何索引。此时,您还可以对索引块进行排序,并创建MySQL优化器更有效地工作所需的统计信息:

    shell>myisamchk -rq --sort-index --analyze tbl_name.MYI
    

    将打包表安装到MySQL数据库目录后,应执行mysqladmin flush-tables强制mysqld开始使用新表。

    要解压缩打包表,请使用myisamchk--unpack选项。