您好,登錄后才能下訂單哦!
這篇文章主要介紹在mysql中查詢緩存的注意事項,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
查詢優化注意事項
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查詢緩存規則
開啟了緩存,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緩存也是不起作用的
在進入一個登錄的頁面時,我們的用戶信息就會被軟件后臺記錄,那么下次打開網站就能直接默認用戶登錄了。我們在mysql查詢緩存中也有這樣的使用,已經被查詢的語句會放在內存,再次查詢就可以直接使用。
以上是“在mysql中查詢緩存的注意事項”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。