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