爲了最小化磁盤的IO,MyISAM存儲引擎的表使用key cache來緩存索引塊,索引塊的緩存大小由key_buffer_size參數來設置,如果數據庫中使的表以MyISAM存儲引擎爲主,則應該適當增加該參
數的值,以便儘可能的緩存索引塊,提高訪問的速度。
默認情況下,所有的索引都使用相同的key cache,當訪問的索引不在緩存中時,使用LRU(Least Recently Used最近最少使用)算法來替換緩存中最近最少使用的索引塊,爲了進一步避免對key cache的爭用,從MSQL5.1開始,可以設置多個key cache,併爲不同的索引鍵指定使用的key cache。
記住:key_buffer_size只能在MyISAM存儲引擎使用。
show variables like 'key_buffer_size' —— 顯示默認key cache的大小
set global key_buffer_size=102400 —— 設置默認key cache的大小
set global my_cache1.key_buffer_size = 204800 —— 設置自定義key cache的大小,my_cache1可以修改爲其他名稱,該名稱就是這個key cache的名稱
select @@global.my_cache1.key_buffer_size —— 顯示自定義key cache的大小,如果要刪除這個緩存,只需把大小設置成0就可以了
上面我們創建了兩個自定義的緩存:my_cache1和my_cache2。下面我們在創建兩張表來演示如何將索引加入緩存。
table1:
table2:
cache index table1, table2 in my_cache1 —— 把table1和table2中所有的索引放入my_cache1緩存。其實這裏並不是馬上就把索引放到緩存,而只是告訴數據庫table1和table2的索引要放入名爲my_cache1緩存,等使用該索引查詢時才放入,或者用LOAD INDEX INTO CACHE命令預先載入。
cache index table1 index (table1_index_id) in my_cache1 —— 把table1中名爲table1_index_id的索引放入my_cache1緩存,這樣可以把表的不同索引放入不同緩存。跟上面一樣並不是馬上就把索引放到緩存,只是建立一個索引和緩存之間的關聯。
通常在數據庫剛剛啓動的時候,需要等待索引被緩存到緩存區中,這段時間據庫會因爲緩存命中率低而導致訪問效率不高。這個時候我們就可以通過LOAD INDEX INTO CACHE命令將索引預加載至緩存區中。具體的操作方式是:
load index into cache table1 —— 把table1中所有的索引加載進緩存,如果索引已經關聯了一個緩存則放入該緩存;如果沒有,則放入系統默認緩存。
load index into cache table1 index (table1_index_id) —— 把table1中名爲table1_index_id的索引加載進緩存
注意:默認的緩存key_buffer_size是無法刪除的。如果你自定義的緩存被刪除,那加載到該緩存的索引會被重新加載到默認緩存。