在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;</table_name>
?以上就是mysql中的PACK_KEYS詳解的內容,更多相關內容請關注PHP中文網(www.php.cn)!