學習MySQL查詢高速緩沖have_query_cache的實際配置方案時,你可能會遇到一些不解的問題,這裡將介紹其不解問題的解決方法,在拿出來與大家分享一下。希望會給你一些幫助在此方面。
其實MySQL(和PHP搭配之最佳組合)有著很強大的功能,只是默認沒有啟用,這篇文章將為大家介紹MySQL(和PHP搭配之最佳組合)查詢調整緩沖設置have_query_cache),可以讓MySQL(和PHP搭配之最佳組合)的速度提高至少5倍。
查詢緩存存儲SELECT查詢的文本以及發送給客戶端的相應結果。如果隨後收到一個相同的MySQL查詢,服務器從查詢緩存中重新得到查詢結果,而不再需要解析和執行查詢。
如果你有一個不經常改變的表並且服務器收到該表的大量相同查詢,查詢緩存在這樣的應用環境中十分有用。對於許多Web服務器來說存在這種典型情況,它根據數據庫內容生成大量的動態頁面。
注釋:查詢緩存不返回舊的數據。當表更改後,查詢緩存值的相關條目被清空。
注釋:如果你有許多MySQL(和PHP搭配之最佳組合)d服務器更新相同的MyISAM表,在這種情況下查詢緩存不起作用。
注釋:查詢緩存不適用於服務器方編寫的語句。如果正在使用服務器方編寫的語句,要考慮到這些語句將不會應用查詢緩存。
下面是查詢緩存的一些性能數據。這些結果是在Linux Alpha 2 x 500MHz系統2GB RAM,64MB查詢緩存)上運行MySQL(和PHP搭配之最佳組合)基准組件產生的。
如果執行的所有查詢是簡單的(如從只有一行數據的表中選取一行),但查詢是不同的,查詢不能被緩存,查詢緩存激活率是13%。這可以看作是最壞的情形。在實際應用中,查詢要復雜得多,因此,查詢緩存使用率一般會很低。
從只有一行的表中查找一行數據時,使用查詢緩存比不使用速度快238%。這可以看作查詢使用緩存時速度提高最小的情況。
服務器啟動時要禁用查詢緩存,設置query_cache_size系統變量為0。禁用查詢緩存代碼後,沒有明顯的速度提高。編譯MySQL(和PHP搭配之最佳組合)時,通過在configure中使用--without-query-cache選項,可以從服務器中徹底去除MySQL查詢緩存能力。
5.13.1. 查詢高速緩沖如何工作
本節描述查詢緩存的工作原理。
查詢解析之前進行比較,因此下面的兩個查詢被查詢緩存認為是不相同的:
- SELECT * FROM tbl_name
- Select * from tbl_name
查詢必須是完全相同的(逐字節相同)才能夠被認為是相同的。另外,同樣的查詢字符串由於其它原因可能認為是不同的。使用不同的數據庫、不同的協議版本或者不同 默認字符集的查詢被認為是不同的查詢並且分別進行緩存。
從查詢緩存中提取一個查詢之前,MySQL(和PHP搭配之最佳組合)檢查用戶對所有相關數據庫和表的SELECT權限。如果沒有權限,不使用緩存結果。
如果從查詢緩存中返回一個查詢結果,服務器把Qcache_hits狀態變量的值加一,而不是Com_select變量。
如果一個表被更改了,那麼使用那個表的所有緩沖MySQL查詢將不再有效,並且從緩沖區中移出。這包括那些映射到改變了的表的使用MERGE表的查詢。一個表可以被許多類型的語句更改,例如INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE。
COMMIT執行完後,被更改的事務InnoDB表不再有效。
使用InnoDB表時,查詢緩存也在事務中工作,使用該表的版本號來檢測其內容是否仍舊是當前的。
在MySQL(和PHP搭配之最佳組合) 5.1中,視圖產生的查詢被緩存。
SELECT SQL_CALC_FOUND_ROWS ...和SELECT FOUND_ROWS() type類型的MySQL查詢使用查詢緩存。即使因創建的行數也被保存在緩沖區內,前面的查詢從緩存中提取,FOUND_ROWS()也返回正確的值。
以上的相關內容就是對MySQL查詢高速緩沖 have_query_cache 配置方法的部分內容介紹,望你能有所收獲。