您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何查詢緩存在mysql中有哪些規則,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
在登錄一個網頁后,我們的登錄信息就會被網頁記錄,那么下次打開網站就能直接默認用戶登錄了。我們在mysql查詢緩存中也有這樣的使用,已經被查詢的語句會放在內存,再次查詢就可以直接使用。
1.mysql查詢緩存規則
開啟了緩存,MySQL Server會自動將查詢語句和結果集返回到內存,下次再查直接從內存中取;
緩存的結果是通過sessions共享的,所以一個client查詢的緩存結果,另一個client也可以使用
MySQL Query Cache內容為 select 的結果集, cache 使用完整的SQL字符串做 key, 并區分大小寫,空格等。即兩個SQL必須完全一致才會導致cache命中。即檢查查詢緩存時,MySQL Server不會對SQL做任何處理,它精確的使用客戶端傳來的查詢,只要字符大小寫或注釋有點不同,查詢緩存就認為是不同的查詢;
prepared statement永遠不會cache到結果,即使參數完全一樣。在 5.1 之后會得到改善。
where條件中如包含任何一個不確定的函數將永遠不會被cache, 比如current_date, now等。
date 之類的函數如果返回是以小時或天級別的,最好先算出來再傳進去。
select * from foo where date1=current_date -- 不會被 cache select * from foo where date1='2008-12-30' -- 被cache, 正確的做法
太大的result set不會被cache (< query_cache_limit)
MySQL緩存在分庫分表環境下是不起作用的
執行SQL里有觸發器,自定義函數時,MySQL緩存也是不起作用的
2.查詢優化注意事項
(1)對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
(2)應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num is null可以在num上設置默認值0,確保表中num列沒有null值,然后這樣查詢:select id from t where num=0
(3)應盡量避免在 where 子句中使用!=或<>操作符,否則引擎將放棄使用索引而進行全表掃描。
(4)應盡量避免在 where 子句中使用or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where num=10 or num=20可以這樣查詢:select id from t where num=10 union all select id from t where num=20
(5)in和 not in 也要慎用,否則會導致全表掃描,如:select id from t where num in(1,2,3) 對于連續的數值,能用 between 就不要用 in 了:select id from t where num between 1 and 3
關于“如何查詢緩存在mysql中有哪些規則”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。