利用mysql查詢緩存
MySQL在執行查詢語句之前,都會在它的緩衝區中查詢是否在相同的查詢語句被執行過,如果有,並且執行結果沒有過期,那麼就直接取查詢結果返回給客戶端,從而提高了查詢效率。
查詢必須是完全相同的,能夠被認為是相同的。但是,同樣的查詢sql語句,使用不同的資料庫、不同的協議版本或者不同字符集的查詢等原因都可能被認為是不同的查詢,不會從緩存不返回舊的數據。
配置查詢緩存:
配置文件中參數query_cache_type設為1
或命令SET SESSION query_cache_type = on
開啟查詢緩存
使用SELECT SQL_NO_CACHE開始的查詢語句則本語句會忽略緩存。
如果一個查詢包含下面函數中的任何一個,它不會被緩存:
Advertisements
BENCHMARK() | CONNECTION_ID() | CURDATE() |
CURRENT_DATE() | CURRENT_TIME() | CURRENT_TIMESTAMP() |
CURTIME() | DATABASE() | 帶一個參數的ENCRYPT() |
FOUND_ROWS() | GET_LOCK() | LAST_INSERT_ID() |
LOAD_FILE() | MASTER_POS_WAIT() | NOW() |
RAND() | RELEASE_LOCK() | SYSDATE() |
不帶參數的UNIX_TIMESTAMP() | USER() |
顯然上面函數都會產生動態值。
在下面的這些條件下,查詢也不會被緩存:
· 引用自定義函數(UDFs)。
· 引用自定義變數。
Advertisements
· 引用mysql系統資料庫中的表。
· 下面方式中的任何一種:
SELECT ...IN SHARE MODE
SELECT ...FOR UPDATE
SELECT ...INTO OUTFILE ...
SELECT ...INTO DUMPFILE ...
SELECT * FROM ...WHERE autoincrement_col IS NULL