如何判斷mysql是否命中緩存

mysql的查詢緩存是在完整的select語句基礎上判斷的,並且只是在剛收到SQL語句的時候才檢查,因此子查詢和存儲過程都沒辦法使用查詢緩存。mysql

若是查詢語句中包含任何的不肯定因素或者函數,那麼就不會命中查詢緩存,不肯定因素指客戶端協議的版本等,而不肯定函數指now()這種函數,它隨着時間變化而變化,是不肯定的。sql

在一個事務提交以前表的相關查詢是不走緩存的。緩存

打個比喻就是mysql將你的整個sql語句原封不動地先檢查是否有不肯定函數,若是有不肯定函數就不走緩存,若是沒有不肯定函數,那麼將sql語句作個md5計算,若是找獲得計算的值就走緩存,不然就不走緩存。函數

爲了用上查詢緩存,優化的思路有下面這些:優化

1.將子查詢或者聯結拆開成單表的查詢,由於整個sql語句只要有不肯定的函數就不走緩存,拆開後其中的某些查詢可能就走緩存了。code

2.將不肯定函數替換成肯定的值,好比你用系統函數current_date()生成的日期就能夠用提早計算好的日期替換掉。事務

相關文章
相關標籤/搜索