萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 小解mysql中MyISAM表的PACK_KEYS壓縮索引

小解mysql中MyISAM表的PACK_KEYS壓縮索引

在MyISAM表,你也可以在創建表的時候通過指定PACK_KEYS=1來前綴壓縮數字。當數字被以高字節優先存儲之時,若你有許多具有同一前綴的整數鍵,上述方法是有幫助的。

在mysql的myisam引擎中,有一個是容易忽視的,叫壓縮索引PACK_KEYS ,

myISAM使用前綴壓縮來減小索引大小,默認情況下會壓縮字符串,也可以壓縮整數

可以使用create table時用PACK_KEYS控制索引壓縮的方式。

PACK_KEYS在MySQL手冊中如下描述:

如果您希望索引更小,則把此選項設置為1。這樣做通常使更新速度變慢,同時閱讀速度加快。把選項設置為0可以取消所有的關鍵字壓縮。把此選項設置為DEFAULT時,存儲引擎只壓縮長的CHAR或VARCHAR列(僅限於MyISAM)。

如果您不使用PACK_KEYS,則默認操作是只壓縮字符串,但不壓縮數字。如果您使用PACK_KEYS=1,則對數字也進行壓縮。

在對二進制數字關鍵字進行壓縮時,MySQL采用前綴壓縮:

o 每個關鍵字需要一個額外的字節來指示前一個關鍵字中有多少字節與下一個關鍵字相同。

o 指向行的指針以高位字節優先的順序存儲在關鍵字的後面,用於改進壓縮效果。

這意味著,如果兩個連續行中有許多相同的關鍵字,則後續的“相同”的關鍵字通常只占用兩個字節(包括指向行的指針)。與此相比,常規情況下,後續的關鍵字占用storage_size_for_key + pointer_size(指針尺寸通常為4)。但是,只有在許多數字相同的情況下,前綴壓縮才有好處。如果所有的關鍵字完全不同,並且關鍵字不能含有NULL值,則每個關鍵字要多使用一個字節。(在這種情況中,儲存壓縮後的關鍵字的長度的字節與用於標記關鍵字是否為NULL的字節是同一字節。

比如有個字段保存 文件名,如"abc.pdf",其中pdf大家都是一樣的,因此可以

根據這個字段采用壓縮索引:

CREATE  TABLE <TABLE_NAME> (
  `id` INT NOT NULL ,
  `name` VARCHAR(250) NULL ,
   PRIMARY KEY (`id`) )
   PACK_KEYS = 1;
ALTER TABLE table_name PACK_KEYS = 1;

copyright © 萬盛學電腦網 all rights reserved