關於對MySQL的SQL_NO_CACHE的理解和用法舉例

chenfeng發表於2017-04-11
SQL_CACHE意思是說,查詢的時候使用快取。


SQL_NO_CACHE解釋如下:

1.對當前query不使用資料庫已有快取來查詢,則當前query花費時間會多點


2.對當前query的產生的結果集不快取至系統query cache裡,則下次相同query花費時間會多點

當我們想用SQL_NO_CACHE來禁止結果快取時發現結果和我們的預期不一樣,查詢執行的結果仍然是快取後的結果。其實,SQL_NO_CACHE的真正作用是禁止快取查詢結果,但並不意味著cache不作為結果返回給query。

SQL_NO_CACHE的官方解釋如下:

SQL_NO_CACHE means that the query result is not cached. It does not mean that the cache is not used to answer the query.

You may use RESET QUERY CACHE to remove all queries from the cache and then your next query should be slow again. Same effect if you change the table, because this makes all cached queries invalid.


以下是實驗過程:


mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A


Database changed
mysql>  select count(*) from fp_data;
+----------+
| count(*) |
+----------+
|   158404 |
+----------+
1 row in set (0.05 sec)




mysql> select count(*) from fp_data;
+----------+
| count(*) |
+----------+
|   158404 |
+----------+
1 row in set (0.03 sec)




mysql> select SQL_CACHE count(*) from fp_data;
+----------+
| count(*) |
+----------+
|   158411 |
+----------+
1 row in set (0.03 sec)




mysql> select SQL_NO_CACHE count(*) from fp_data;
+----------+
| count(*) |
+----------+
|   158404 |
+----------+
1 row in set (0.02 sec)


總結:可以在 SELECT 語句中指定查詢快取的選項,對於那些肯定要實時的從表中獲取資料的查詢,或者對於那些一天只執行一次的查詢,我們都可以指定不進行查詢快取,使用 SQL_NO_CACHE 選項。
對於那些變化不頻繁的表,查詢操作很固定,我們可以將該查詢操作快取起來,這樣每次執行的時候不實際訪問表和執行查詢,只是從快取獲得結果,可以有效地改善查詢的效能,使用SQL_CACHE 選項。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2137050/,如需轉載,請註明出處,否則將追究法律責任。

相關文章