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