這篇文章主要介紹了MySQL快取的查詢和清除命令使用詳解,對於一些不常改變資料且有大量相同sql查詢的表,查詢快取會顯得比較有用一些,需要的朋友可以參考下
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
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)
我們先執行一次,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]
flush_option可以是下列任何東西:
FLUSH TABLES WITH READ LOCK 關閉所有開啟的表,同時對於所有資料庫中的表都加一個讀鎖,直到顯示地執行unlock tables,該操作常常用於資料備份的時候。
STATUS 重置大多數狀態變數到0。
MASTER 刪除所有的二進位日誌檔案中的二進位日誌文件,重置二進位日誌檔案的索引檔案為空,建立一個新的二進位日誌檔案,不過這個已經不推薦使用,改成reset master 了。可以想像,以前自己是多土啊,本來一條簡單的命令就可以搞定的,卻要好幾條命令來,以前的做法是先查出來當前的二進制日誌文件名,再用purge 操作。
QUERY CACHE 重整查詢緩存,消除其中的碎片,提高效能,但是並不影響查詢快取中現有的數據,這點和Flush table 和Reset Query Cache(將會清空查詢快取的內容)不一樣的。
SLAVE 類似於重置複製吧,讓從資料庫忘記主資料庫的複製位置,同時也會刪除已下載下來的relay log,與Master一樣,已經不建議使用,改成Reset Slave了。這個也很有用的。
一般來講,Flush作業都會記錄在二進位日誌檔案中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不會記錄,因此上述操作如果記錄在二進位日誌檔中話,會對從資料庫造成影響。注意:Reset操作其實扮演的是一個Flush操作的增強版的角色。
以上是分享MySQL快取的查詢和清除命令實例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!