校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > MySQL系列之九 mysql查詢緩存及索引

MySQL系列之九 mysql查詢緩存及索引

熱門標簽:外東北地圖標注 拉卡拉外呼系統 高清地圖標注道路 云南電商智能外呼系統價格 400電話可以辦理嗎 臨清電話機器人 話務外呼系統怎么樣 智能外呼系統復位 大眾點評星級酒店地圖標注

系列教程

MySQL系列之開篇 MySQL關系型數據庫基礎概念
MySQL系列之一 MariaDB-server安裝
MySQL系列之二 多實例配置
MySQL系列之三 基礎篇
MySQL系列之四 SQL語法
MySQL系列之五 視圖、存儲函數、存儲過程、觸發器
MySQL系列之六 用戶與授權
MySQL系列之七 MySQL存儲引擎
MySQL系列之八 MySQL服務器變量
MySQL系列之十 MySQL事務隔離實現并發控制
MySQL系列之十一 日志記錄
MySQL系列之十二 備份與恢復
MySQL系列之十三 MySQL的復制
MySQL系列之十四 MySQL的高可用實現
MySQL系列之十五 MySQL常用配置和性能壓力測試

一、MySQL的架構

  1. 連接器
  2. 連接池,安全認證、線程池、連接限制、檢查內存、緩存
  3. SQL接口 DML、DDL
  4. SQL解析器,對SQL語句的權限檢查、解析為二進制程序
  5. 優化器,優化訪問路徑
  6. 緩存cache,buffer
  7. 存儲引擎 innodb
  8. 文件系統
  9. 日志

二、查詢緩存(Query Cache)

  1. SQL語句

  2. 查詢緩存

  3. 解析器

  4. 解析樹

  5. 預處理

  6. 查找最好的查詢路徑

  7. 查詢優化SQL語句

  8. 執行計劃

  9. API調用存儲引擎

  10. 調用數據,返回結果

緩存SELECT操作或預處理查詢的結果集和SQL語句,當有新的SELECT語句或預處理查詢語句請求,先去查詢緩存,判斷是否存在可用的記錄集,判斷標準:與緩存的SQL語句,是否完全一樣,區分大小寫。

不需要對SQL語句做任何解析和執行,當然語法解析必須通過在先,直接從Query Cache中獲得查詢結果,提高查詢性能

查詢緩存的判斷規則,不夠智能,也即提高了查詢緩存的使用門檻,降低其效率;查詢緩存的使用,會增加檢查和清理Query Cache中記錄集的開銷

哪些查詢可能不會被緩存:

  • 查詢語句中加了SQL_NO_CACHE參數;
  • 查詢語句中含有獲得值的函數,包含自定義函數,如:NOW()、CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ()等;
  • 對系統數據庫的查詢:mysql、information_schema 查詢語句中使用SESSION級別變量或存儲過程中的局部變量;
  • 查詢語句中使用了LOCK IN SHARE MODE、FOR UPDATE的語句,查詢語句中類似SELECT …INTO 導出數據的語句;
  • 對臨時表的查詢操作;存在警告信息的查詢語句;不涉及任何表或視圖的查詢語句;某用戶只有列級別權限的查詢語句;
  • 事務隔離級別為Serializable時,所有查詢語句都不能緩存。

查詢緩存相關的服務器變量:

  • query_cache_min_res_unit: 查詢緩存中內存塊的最小分配單位,默認4k,較小值會減少浪費,但會導致更頻繁的內存分配操作,較大值會帶來浪費,會導致碎片過多,內存不足;
  • query_cache_limit:單個查詢結果能緩存的最大值,默認為1M,對于查詢結果過大而無法緩存的語句,建議使用SQL_NO_CACHE;
  • query_cache_size:查詢緩存總共可用的內存空間;單位字節,必須是1024的整數倍,最小值40KB,低于此值有警報;
  • query_cache_wlock_invalidate:如果某表被其它的會話鎖定,是否仍然可以從查詢緩存中返回結果,默認值為OFF,表示可以在表被其它會話鎖定的場景中繼續從緩存返回數據;ON則表示不允許;
  • query_cache_type: 是否開啟緩存功能,取值為ON, OFF, DEMAND,默認值為ON
    - 值為OFF或0時,查詢緩存功能關閉;
    - 值為ON或1時,查詢緩存功能打開,SELECT的結果符合緩存條件即會緩存,否則,不予緩存,顯式指定SQL_NO_CACHE,不予緩存;
    - 值為DEMAND或2時,查詢緩存功能按需進行,顯式指定SQL_CACHE的SELECT語句才會緩存;其它均不予緩存。
MariaDB [(none)]> SHOW VARIABLES LIKE 'query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33554432 |
| query_cache_strip_comments   | OFF      |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+

優化查詢緩存:

查詢緩存相關的狀態變量:

  • Qcache_free_blocks:處于空閑狀態 Query Cache中內存 Block 數;
  • Qcache_free_memory:處于空閑狀態的 Query Cache 內存總量;
  • Qcache_hits:Query Cache 命中次數;
  • Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次數,即沒有命中的次數;
  • Qcache_lowmem_prunes:當 Query Cache 內存容量不夠,需要刪除老的Query Cache 以給新的 Cache 對象使用的次數;
  • Qcache_not_cached:沒有被 Cache 的 SQL 數,包括無法被 Cache 的 SQL 以及由于 query_cache_type 設置的不會被 Cache 的 SQL語句;
  • Qcache_queries_in_cache:在 Query Cache 中的 SQL 數量;
  • Qcache_total_blocks:Query Cache 中總的 Block。
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 33536824 |
| Qcache_hits             | 0        |
| Qcache_inserts          | 0        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 4        |
| Qcache_queries_in_cache | 0        |
| Qcache_total_blocks     | 1        |
+-------------------------+----------+
命中率和內存使用率估算:
  • 查詢緩存中內存塊的最小分配單位query_cache_min_res_unit :(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache
  • 查詢緩存命中率 :Qcache_hits / ( Qcache_hits + Qcache_inserts ) * 100%
  • 查詢緩存內存使用率:(query_cache_size – qcache_free_memory) / query_cache_size * 100%

三、索引

​ 索引是特殊數據結構:定義在查找時作為查找條件的字段,索引實現在存儲引擎。

索引可以降低服務需要掃描的數據量,減少了IO次數
索引可以幫助服務器避免排序和使用臨時表
索引可以幫助將隨機I/O轉為順序I/O
但是占用額外空間,影響插入速度

1、索引類型:

  • B + Tree 索引:順序存儲,每一個葉子節點到根的距離都是相同的,左前綴索引,適合查詢范圍類的數據;
    - 適合使用B-Tree索引的查詢類型
    - 全值匹配
    - 匹配最左前綴
    - 匹配范圍值
    - 精確匹配某一列并范圍匹配另一列(復合索引)
    - 只訪問索引的查詢
    - 不適合使用B-tree索引的查詢類型
    - 不從最左列開始
    - 不能跳過索引中的列
    - 如果查詢中某個列是為范圍查詢那么右側的列無法再使用索引優化查詢
  • Hash索引:基于哈希表,構建出鍵值對的索引,特別適用于精確匹配索引中的索引列,只支持等值比較查詢(IN,=,>);不適合于順序查詢,不支持模糊匹配;只有Memory存儲引擎支持顯式Hash索引
  • 空間索引(R - Tree):只有MyISAM支持空間索引

  • 全文索引(FULL TEXT):在文本中查找關鍵詞

2、高性能索引策略:

  • 獨立使用列,盡量避免其參與運算
  • 使用左前綴索引:索引構建于字段的左側的多少字符要通過索引選擇性來評估;索引選擇性:不重復的索引值和數據表的記錄總數的比值
  • 多列索引:AND操作時更適合使用多列索引,而非為每個列創建單獨的索引
  • 選擇合適的索引列次序:無排序和分組時,將選擇性最高放左側

3、索引的優化建議

  • 只要列中含有NULL值,就最好不要在此例設置索引,復合索引如果有NULL值,此列在使用時也不會使用索引
  • 盡量使用短索引,如果可以,應該制定一個前綴長度
  • 對于經常在where子句使用的列,最好設置索引
  • 對于有多個列where或者order by子句,應該建立復合索引
  • 對于like語句,以%或者‘-'開頭的不會使用索引,以%結尾會使用索引
  • 盡量不要在列上進行運算(函數操作和表達式操作)
  • 盡量不要使用not in和>操作
  • 多表連接時,盡量小表驅動大表,即小表 join 大表
  • 在千萬級分頁時使用limit
  • 對于經常使用的查詢,可以開啟緩存
  • 大部分情況連接效率遠大于子查詢

4、索引的創建與刪除

創建索引

CREATE INDEX index_name ON tbl_name (index_col_name,...);

MariaDB [hellodb]> CREATE INDEX index_name ON students(name); #創建簡單索引
MariaDB [hellodb]> CREATE INDEX index_name_age ON students(name,age); #創建復合索引

查看索引

SHOW INDEXES FROM [db_name.]tbl_name;

MariaDB [hellodb]> SHOW INDEX FROM students\G

刪除索引

DROP INDEX index_name ON tbl_name;

MariaDB [hellodb]> DROP INDEX index_name ON students;

優化表空間

MariaDB [hellodb]> OPTIMIZE TABLE students;

查看索引使用的情況

啟用記錄索引使用情況:SET GLOBAL userstat=1;

查看索引使用情況:SHOW INDEX_STATISTICS;

我們可以統計不經常使用的索引從而進行優化

四、EXPLAIN命令

通過EXPLAIN來分析索引的有效性:EXPLAIN SELECT clause,獲取查詢執行計劃信息,用來查看查詢優化器如何執行查詢

MariaDB [hellodb]> EXPLAIN SELECT name FROM students WHERE name = 'Lin Daiyu'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: students
         type: ref
possible_keys: index_name_age
          key: index_name_age
      key_len: 152
          ref: const
         rows: 1
        Extra: Using where; Using index
  • id:當前查詢語句中,每個SELECT語句的編號;復雜類型的查詢有三種:簡單子查詢、用于FROM子句中的子查詢、聯合查詢(UNION,注意:UNION查詢的分析結果會出現一個額外匿名臨時表)
  • select_type:
    - SIMPLE :簡單查詢
    - SUBQUERY: 簡單子查詢
    - PRIMARY:最外面的SELECT
    - DERIVED: 用于FROM中的子查詢
    - UNION:UNION語句的第一個之后的SELECT語句
    - UNION RESULT: 匿名臨時表
  • table:SELECT語句關聯到的表
  • type:關聯類型或訪問類型,即MySQL決定的如何去查詢表中的行的方式,以下順序,性能從低到高
    - ALL: 全表掃描
    - index:根據索引的次序進行全表掃描;如果在Extra列出現“Using index”表示了使用覆蓋索引,而非全表掃描
    - range:有范圍限制的根據索引實現范圍掃描;掃描位置始于索引中的某一點,結束于另一點
    - ref: 根據索引返回表中匹配某單個值的所有行
    - eq_ref:僅返回一個行,但與需要額外與某個參考值做比較
    - const, system: 直接返回單個行
  • possible_keys:查詢可能會用到的索引
  • key: 查詢中使用到的索引
  • key_len: 在索引使用的字節數
  • ref: 在利用key字段所表示的索引完成查詢時所用的列或某常量值
  • rows:MySQL估計為找所有的目標行而需要讀取的行數
  • Extra:額外信息
    - Using index:MySQL將會使用覆蓋索引,以避免訪問表
    - Using where:MySQL服務器將在存儲引擎檢索后,再進行一次過濾
    - Using temporary:MySQL對結果排序時會使用臨時表
    - Using filesort:對結果使用一個外部索引排序

五、SQL語句性能優化

  1. 查詢時,能不要*就不用*,盡量寫全字段名
  2. 大部分情況連接效率遠大于子查詢
  3. 多表連接時,盡量小表驅動大表,即小表 join 大表
  4. 在千萬級分頁時使用limit
  5. 對于經常使用的查詢,可以開啟緩存
  6. 多使用explain和profile分析查詢語句
  7. 查看慢查詢日志,找出執行時間長的sql語句優化

到此這篇關于MySQL系列之九 mysql查詢緩存及索引的文章就介紹到這了,更多相關mysql查詢緩存及索引內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySql 緩存查詢原理與緩存監控和索引監控介紹
  • 淺談mysql增加索引不生效的幾種情況
  • mysql聯合索引的使用規則
  • MySQL 使用索引掃描進行排序
  • MySQL索引是啥?不懂就問

標簽:定西 無錫 山西 三明 溫州 揚州 阿里 福州

巨人網絡通訊聲明:本文標題《MySQL系列之九 mysql查詢緩存及索引》,本文關鍵詞  MySQL,系列,之,九,mysql,查詢,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL系列之九 mysql查詢緩存及索引》相關的同類信息!
  • 本頁收集關于MySQL系列之九 mysql查詢緩存及索引的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产精品福利一区二区三区| 亚洲成人777| 欧美一卡二卡在线观看| 美女网站一区二区| 国产亚洲欧美一级| 色婷婷综合久久久中文一区二区| 亚洲成人av电影| 国产女主播一区| 欧美巨大另类极品videosbest| 97精品超碰一区二区三区| a4yy欧美一区二区三区| 色呦呦网站一区| 蜜桃视频在线一区| 久久er99精品| 成人av在线播放网站| 成人av电影在线观看| 色伊人久久综合中文字幕| 欧美影院午夜播放| 成人高清免费观看| 色综合夜色一区| 国产精品一区二区视频| av影院午夜一区| 久久99精品久久久| av亚洲精华国产精华精华| 欧美在线视频全部完| 91精品久久久久久久91蜜桃| 97精品久久久午夜一区二区三区 | 91免费版pro下载短视频| 一本一道久久a久久精品| 在线不卡免费欧美| 在线看国产日韩| 日韩欧美一二三| 亚洲日本韩国一区| 久88久久88久久久| 蜜桃免费网站一区二区三区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 69av一区二区三区| 久久精品亚洲一区二区三区浴池| 一区免费观看视频| 美腿丝袜一区二区三区| 色网站国产精品| 国产午夜三级一区二区三| 欧美videofree性高清杂交| 国产欧美精品一区二区色综合| 欧美日韩中文国产| 欧美一级搡bbbb搡bbbb| 欧美色视频在线观看| 国产日韩视频一区二区三区| 五月婷婷激情综合网| 午夜免费久久看| 国产福利视频一区二区三区| 91麻豆精品国产91久久久使用方法 | 国产福利一区二区三区视频在线| 欧美日韩一二三区| 欧美中文字幕一二三区视频| 一本大道久久a久久精品综合| a4yy欧美一区二区三区| av爱爱亚洲一区| hitomi一区二区三区精品| 国产精品888| 欧美一级欧美三级在线观看| 欧美日韩国产综合草草| 欧美调教femdomvk| 欧美精品在线视频| 亚洲一级二级三级在线免费观看| 99综合影院在线| 国产拍欧美日韩视频二区| 国内久久精品视频| 精品入口麻豆88视频| 日本不卡一区二区| 欧美一级免费观看| 午夜精品国产更新| 蜜桃精品在线观看| 国产自产2019最新不卡| 欧美老肥妇做.爰bbww视频| 亚洲第一二三四区| 欧美色精品在线视频| 亚洲色图制服诱惑| 色综合久久综合网| 亚洲一区av在线| 久久精品国产亚洲a| 懂色av一区二区在线播放| 成人app软件下载大全免费| 欧美激情一二三区| 亚洲最大成人综合| 91豆麻精品91久久久久久| 欧美精品v国产精品v日韩精品 | 国产风韵犹存在线视精品| 久久综合九色欧美综合狠狠 | 一区二区不卡在线视频 午夜欧美不卡在| 91丨porny丨蝌蚪视频| 国产精品看片你懂得| 不卡大黄网站免费看| 亚洲一区二区综合| 91精品午夜视频| 韩国欧美国产1区| 国产精品久久久久久久久免费樱桃| 亚洲乱码国产乱码精品精98午夜| 色天天综合色天天久久| 日韩一区欧美二区| 91在线无精精品入口| 亚洲国产婷婷综合在线精品| 日韩一级精品视频在线观看| 国产成人免费9x9x人网站视频| 国产精品久久毛片| 欧美精选在线播放| 亚洲色图另类专区| 日韩欧美国产不卡| 视频一区二区不卡| 中文字幕av一区 二区| 九色porny丨国产精品| 欧美丰满少妇xxxbbb| 一区二区三区精品视频| 精品毛片乱码1区2区3区| 午夜激情一区二区三区| 久久久久久一二三区| 免费成人结看片| 91精品欧美综合在线观看最新 | 国产精品毛片无遮挡高清| 欧美日韩国产片| 不卡视频在线观看| 国产亚洲制服色| 国产精品99久久久久| 久久亚洲精品小早川怜子| 91久久一区二区| 国产成人免费av在线| 看国产成人h片视频| 亚洲风情在线资源站| 欧美日韩免费电影| 99视频有精品| 亚洲女女做受ⅹxx高潮| 国产亚洲一区字幕| 日韩欧美自拍偷拍| 欧美美女直播网站| 色综合视频一区二区三区高清| 国产九九视频一区二区三区| 亚洲精品一区二区在线观看| 国产精品一区一区三区| 日本在线不卡视频一二三区| 日韩精品一区二区三区在线观看| 色av成人天堂桃色av| 97精品视频在线观看自产线路二| 一区二区三区资源| 日韩欧美国产1| 欧美一区二区人人喊爽| 免费观看成人av| 日韩精品成人一区二区在线| 精品久久一区二区三区| 日韩精品一区二区三区在线观看 | 国产99久久久国产精品| 紧缚奴在线一区二区三区| 伦理电影国产精品| 另类专区欧美蜜桃臀第一页| 久久国产福利国产秒拍| 国产精品美女久久久久aⅴ| 国产精品污污网站在线观看 | 亚洲午夜免费福利视频| 一区二区三区**美女毛片| 亚洲福利视频导航| 麻豆高清免费国产一区| 成人欧美一区二区三区白人| 欧美美女喷水视频| 国产精品夜夜嗨| 丁香亚洲综合激情啪啪综合| 成人妖精视频yjsp地址| 亚洲成精国产精品女| 国产日韩欧美综合一区| 国产精品久久久久aaaa| 亚洲自拍与偷拍| 日本人妖一区二区| 亚洲精品欧美专区| 国产欧美综合色| 亚洲精选视频免费看| 丝袜国产日韩另类美女| 精品在线播放免费| av中文字幕不卡| 欧美妇女性影城| 日本精品视频一区二区三区| 欧美性猛交xxxx黑人交| 日韩欧美高清一区| 欧美日韩国产精选| www日韩大片| 8x8x8国产精品| 91国产福利在线| 精品久久久三级丝袜| 亚洲图片激情小说| 国产婷婷一区二区| 337p日本欧洲亚洲大胆色噜噜| 中文字幕一区二区视频| 日韩国产精品久久| 亚洲一级在线观看| 国产不卡在线视频| 欧美最新大片在线看| 久久久久久久精| 久久―日本道色综合久久| 一区二区三区欧美| 国产精品1024久久| 久久激情五月激情| av电影在线观看一区| 日韩欧美的一区|