Mysql 查詢緩存
查詢緩存的作用就是當查詢接收到一個和之前同樣的查詢,服務器將會從查詢緩存種檢索結果,而不是再次分析和執行上次的查詢。這樣就大大提高了性能,節省時間。
1.配置查詢緩存
修改配置文件,修改[mysqld]下的query_cache_size和query_cache_type(如果沒有則添加)。其中query_cache_size表示緩存的大小,而query_cache_type有3個值,表示緩存那種類 型的select結果集,query_cache_type各個值如下:
0或off關閉緩存
1或on開啟緩存,但是不保存使用sql_no_cache的select語句,如不緩存select sql_no_cache name from wei where id=2
2或demand開啟有條件緩存,只緩存帶sql_cache的select語句,緩存select sql_cache name from wei where id=4
例子的配置為下,配置完成重啟Mysql服務器即可。
query_cache_size=10M query_cache_type=1
可以用如下命令查看是否開啟,其中have_query_cache為是否開啟,query_cache_limit 指定單個查詢能夠使用的緩沖區大小,缺省為1M;query_cache_min_res_unit為系統分配的最小緩存塊大小,默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據 查詢,就容易造成內存碎片和浪費;query_cache_size和query_cache_type就是上面我們的配置;query_cache_wlock_invalidate表示當有其他客戶端正在對MyISAM表進行寫操作時,如果查詢在query cache中,是否返回cache結果還是等寫操作完成再讀表獲取結果。
mysql> show variables like '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 10485760 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 6 rows in set (0.00 sec)
2.測試
我們先執行一次,select count(*) from wei ;然後再執行一次,可以看出第二次用的時間遠遠低於第一次的執行,因為第二次從緩存中讀取了select結果。
mysql> select count(*) from wei ; +----------+ | count(*) | +----------+ | 4194304 | +----------+ 1 row in set (3.92 sec) mysql> select count(*) from wei ; +----------+ | count(*) | +----------+ | 4194304 | +----------+ 1 row in set (0.00 sec)
我們可以通過如下命令查看現在緩存的情況
mysql> show status like 'qcache%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 10475424 | | Qcache_hits | 1 | | Qcache_inserts | 1 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 1 | | Qcache_total_blocks | 4 | +-------------------------+----------+ 8 rows in set (0.00 sec)
其中各個參數的意義如下:
清除緩存
mysql的FLUSH句法(清除緩存)
FLUSH flush_option [,flush_option]
如果你想要清除一些MySQL使用內部緩存,你應該使用FLUSH命令。為了執行FLUSH,你必須有reload權限。
flush_option可以是下列任何東西:
一般來講,Flush操作都會記錄在二進制日志文件中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不會記錄,因此上述操作如果記錄在二進制日志文件中話,會對從數據庫造成影響。注意:Reset操作其實扮演的是一個Flush操作的增強版的角色。