mysql索引之八:myisam压缩(前缀压缩)索引
myisam使用前綴壓縮來減少索引的大小,從而讓更多的索引可以放入內存中,默認只壓縮字符串,但通過參數配置也可以對整數做壓縮,myisam壓縮每個索引塊的方法是,先完全保存索引塊中的第一個值,然后將其他值和第一個值進行比較得到相同前綴的字節數(長度)和剩余的不同后綴部分(即把相同部分去掉),把這部分存儲起來即可(相同前綴長度和不同后綴部分字符串)。如:索引塊中的第一個值是perform,第二個是performance,那么第二個值的前綴壓縮后存儲的是類似7,ance,這樣的形式,myisam對行指針也采用類似的前綴壓縮方式。
壓縮塊使用更少的空間,代價是某些操作可能更慢,因為每個值的壓縮前綴都依賴于前面的值,所以myisam查找時無法在索引塊使用二分查找而只能從頭開始掃描,正序的掃描速度還不錯,但如果是倒序掃描,如:order by desc就不是很好了,所有在塊中查找某一行的操作平均都需要掃描半個索引塊。
測試表明,對于CPU密集型應用,因為掃描需要隨機查找,壓縮索引使得myisam在索引查找上要慢好幾倍,壓縮索引的倒序掃描就更慢了,壓縮索引需要在CPU內存資源與磁盤之間做權衡,壓縮索引可能只需要十分之一大小的磁盤,如果是IO密集型應用,對于某些查詢帶來的好處會比成本多很多。即壓縮索引適合IO密集型應用,不太適合CPU密集型應用。
可以在create table語句中指定pack_keys參數來控制myisam表的索引壓縮方式:
PACK_KEYS [=] {0 | 1 | DEFAULT}
0: 表示關閉索引壓縮
1: 表示開啟數字和字符串壓縮
default:表示只壓縮超長字符串char和varchar列
如果建表時不指定這個選項,那么默認只壓縮字符串,不壓縮數字
總結
以上是生活随笔為你收集整理的mysql索引之八:myisam压缩(前缀压缩)索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从0到1实现Web端H.265播放器:视
- 下一篇: svg 贝塞尔曲线图解(记录)