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資料庫物件
- 資料庫的檢索語句資料庫
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- 資料庫操作語句資料庫
- 【資料庫】SQL語句資料庫SQL
- 利用WITH MOVE語句獲取資料庫邏輯檔名BG資料庫
- 報表資料的可控快取快取
- 清除 Electron 中的快取資料快取
- MySQL 的資料管理及 DML 語句MySql
- 資料庫查詢語句資料庫
- Oracle資料庫語句大全Oracle資料庫
- oracle資料庫常用語句Oracle資料庫
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- 資料庫常用的sql語句彙總資料庫SQL
- 資料庫常用的sql語句大全--sql資料庫SQL
- Laravel 獲取執行的sql語句LaravelSQL
- 清除 Nuxt 資料快取:clearNuxtDataUX快取
- 2.5 指定資料庫建立語句資料庫
- 資料庫常用操作SQL語句資料庫SQL
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- Web快取知多少(快取機制和資料儲存)Web快取
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- MySQL 匯出一條資料的插入語句MySql
- mysql資料庫語句自動生成MySql資料庫
- oracle-資料庫- insert 插入語句Oracle資料庫
- 檢視 Laravel 查詢資料語句Laravel
- 資料庫學習(一)——select語句資料庫
- 【UniApp】-uni-app-資料快取APP快取
- Python操作Redis快取資料庫PythonRedis快取資料庫
- 前端快取API請求資料前端快取API
- 微信清除快取資料方法快取
- Oracle中獲取TABLE的DDL語句的方法Oracle
- 用於Electron/Nodejs的資料持久快取庫NodeJS快取
- 分散式快取--快取與資料庫強一致場景下的方案分散式快取資料庫
- 分散式快取--快取與資料庫一致性方案分散式快取資料庫
- sql 正則替換資料庫語句!SQL資料庫
- 2.4 使用 CREATE DATABASE 語句建立資料庫Database資料庫