MYSQL---SQL語句的資料快取
1. 查詢快取設定
1) 驗證伺服器是否支援查詢快取
show variables like '%have_query_cache%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
2) 查詢快取會受到以下3個系統變數值的影響
show variables like 'query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| query_cache_limit | 1048576 | //能夠快取的最大結果集大小
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 | //決定為查詢快取分配的記憶體大小
| query_cache_type | OFF | //決定查詢快取的操作方式
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
那麼mysql到底是怎麼決定到底要不要把查詢結果放到查詢快取中呢?是根據query_cache_type這個變數來決定的。
這個變數有三個取值:0,1,2,分別代表了off、on、demand。
mysql預設為開啟 on (1)
如果是0,那麼query cache 是關閉的。
如果是1,那麼查詢總是先到查詢快取中查詢,即使使用了sql_no_cache仍然查詢快取,因為sql_no_cache只是不快取查詢結果,而不是不使用查詢結果。
如果是2,DEMAND沒有使用sql_cache,好像仍然使用了查詢快取
結論:只要query_cache_type沒有關閉,sql查詢總是會使用查詢快取,如果快取沒有命中則開始查詢的執行計劃到表中查詢資料。
2. sql_cahce和sql_no_cache hints的使用
為了測試sql語句的效率,有時候要不用快取來查詢。
使用SELECT SQL_NO_CACHE ...語法即可
SQL_NO_CACHE的真正作用是禁止快取查詢結果,但並不意味著cache不作為結果返回給query。
目前的SQL_NO_CACHE有兩種解釋:
1.對當前query不使用資料庫已有快取來查詢,則當前query花費時間會多點
2.對當前query的產生的結果集不快取至系統query cache裡,則下次相同query花費時間會多點
sql_cache意思是說,查詢的時候使用快取。
對SQL_NO_CACHE的解釋及測試如下:
SQL_NO_CACHE means that the query result is not cached. It does not meanthat 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> select count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (7.22 sec)
mysql> select count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.45 sec)
mysql> select count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.45 sec)
mysql> select SQL_NO_CACHE count(*) from users where email = 'hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.43 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2779525/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle獲取資料庫中的物件建立語句Oracle資料庫物件
- 【原】獲取SQLServer的最完整資料字典的SQL語句SQLServer
- 【轉】通過sql語句獲取資料庫的基本資訊SQL資料庫
- 資料快取的實現快取
- 資料物件的快取策略物件快取
- SQL語句資料SQL
- .net資料快取快取
- 資料庫的檢索語句資料庫
- 報表資料的可控快取快取
- 清除 Electron 中的快取資料快取
- 【資料庫】SQL語句資料庫SQL
- 資料庫操作語句資料庫
- memcached資料庫快取資料庫快取
- Redis快取php資料Redis快取PHP
- PB快取資料指南快取
- DataTable快取資料操作快取
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 檢視資料字典快取(或行快取)的丟失率快取
- 利用WITH MOVE語句獲取資料庫邏輯檔名BG資料庫
- 使用SQL語句從資料庫一個表中隨機獲取資料SQL資料庫隨機
- MySQL 的資料管理及 DML 語句MySql
- mysql導資料庫用到的語句MySql資料庫
- oracle資料庫常用語句Oracle資料庫
- 資料庫查詢語句資料庫
- 資料庫常用sql 語句資料庫SQL
- Oracle資料庫語句大全Oracle資料庫
- 資料庫SQL拼接語句資料庫SQL
- 資料庫語句練習資料庫
- SQL語句批量插入資料SQL
- 微信清除快取資料方法快取
- 清除 Nuxt 資料快取:clearNuxtDataUX快取
- 獲取物件DDL語句的方法物件
- 獲取物件的構建語句物件
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- Web快取知多少(快取機制和資料儲存)Web快取
- 系統快取全解析4:應用程式資料快取快取
- Oracle 獲取ddl語句Oracle