好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 五分鐘帶你搞懂MySQL索引下推

五分鐘帶你搞懂MySQL索引下推

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

如果你在面試中,聽到MySQL5.6”、“索引優化” 之類的詞語,你就要立馬get到,這個問的是“索引下推”。

什么是索引下推

索引下推(Index Condition Pushdown,簡稱ICP),是MySQL5.6版本的新特性,它能減少回表查詢次數,提高查詢效率。

索引下推優化的原理

我們先簡單了解一下MySQL大概的架構:

MySQL服務層負責SQL語法解析、生成執行計劃等,并調用存儲引擎層去執行數據的存儲和檢索。

索引下推的下推其實就是指將部分上層(服務層)負責的事情,交給了下層(引擎層)去處理。

我們來具體看一下,在沒有使用ICP的情況下,MySQL的查詢:

  • 存儲引擎讀取索引記錄;
  • 根據索引中的主鍵值,定位并讀取完整的行記錄;
  • 存儲引擎把記錄交給Server層去檢測該記錄是否滿足WHERE條件。

使用ICP的情況下,查詢過程:

  • 存儲引擎讀取索引記錄(不是完整的行記錄);
  • 判斷WHERE條件部分能否用索引中的列來做檢查,條件不滿足,則處理下一行索引記錄;
  • 條件滿足,使用索引中的主鍵去定位并讀取完整的行記錄(就是所謂的回表);
  • 存儲引擎把記錄交給Server層,Server層檢測該記錄是否滿足WHERE條件的其余部分。

索引下推的具體實踐

理論比較抽象,我們來上一個實踐。

使用一張用戶表tuser,表里創建聯合索引(name, age)。

如果現在有一個需求:檢索出表中名字第一個字是張,而且年齡是10歲的所有用戶。那么,SQL語句是這么寫的:

select * from tuser where name like '張%' and age=10;

假如你了解索引最左匹配原則,那么就知道這個語句在搜索索引樹的時候,只能用 張,找到的第一個滿足條件的記錄id為1。

那接下來的步驟是什么呢?

沒有使用ICP

在MySQL 5.6之前,存儲引擎根據通過聯合索引找到name likelike '張%' 的主鍵id(1、4),逐一進行回表掃描,去聚簇索引找到完整的行記錄,server層再對數據根據age=10進行篩選

我們看一下示意圖:

可以看到需要回表兩次,把我們聯合索引的另一個字段age浪費了。

使用ICP

而MySQL 5.6 以后, 存儲引擎根據(name,age)聯合索引,找到name likelike '張%',由于聯合索引中包含age列,所以存儲引擎直接再聯合索引里按照age=10過濾。按照過濾后的數據再一一進行回表掃描。

我們看一下示意圖:

可以看到只回表了一次。

除此之外我們還可以看一下執行計劃,看到Extra一列里 Using index condition,這就是用到了索引下推。

+----+-------------+-------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
| id | select_type | table | partitions | type  | possible_keys | key      | key_len | ref  | rows | filtered | Extra                 |
+----+-------------+-------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE      | tuser | NULL       | range | na_index      | na_index | 102     | NULL |    2 |    25.00 | Using index condition |
+----+-------------+-------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+

索引下推使用條件

  • 只能用于range ref eq_refref_or_null訪問方法;
  • 只能用于InnoDB和 MyISAM存儲引擎及其分區表;
  • InnoDB存儲引擎來說,索引下推只適用于二級索引(也叫輔助索引);

索引下推的目的是為了減少回表次數,也就是要減少IO操作。對于InnoDB的聚簇索引來說,數據和索引是在一起的,不存在回表這一說。

  • 引用了子查詢的條件不能下推;
  • 引用了存儲函數的條件不能下推,因為存儲引擎無法調用存儲函數。

相關系統參數

索引條件下推默認是開啟的,可以使用系統參數optimizer_switch來控制器是否開啟。

查看默認狀態:

mysql> select @@optimizer_switch\G;
*************************** 1. row ***************************
@@optimizer_switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on
1 row in set (0.00 sec)

切換狀態:

set optimizer_switch="index_condition_pushdown=off";
set optimizer_switch="index_condition_pushdown=on";

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

您可能感興趣的文章:
  • 一篇文章讀懂什么是MySQL索引下推(ICP)
  • MySQL索引下推(ICP)的簡單理解與示例
  • 五分鐘讓你快速弄懂MySQL索引下推
  • MySQL帶你秒懂索引下推

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

巨人網絡通訊聲明:本文標題《五分鐘帶你搞懂MySQL索引下推》,本文關鍵詞  五分鐘,帶你,搞懂,MySQL,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《五分鐘帶你搞懂MySQL索引下推》相關的同類信息!
  • 本頁收集關于五分鐘帶你搞懂MySQL索引下推的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 四虎8848精品成人免费网站| 机机对机机无遮挡超清晰视频| 免费看片A级毛片免费看电影男| 屁股撅过来扒开调教| 欧美AV无码白嫩一区二区不卡| 公交车掀开奶罩边躁狠狠躁动态图| 操美女免费| 美女黄频视频a美女大全| aaa黑人一级毛片| 男女裸交无套啪啪激情高潮| Chinese 91 Porn video| 亚洲男人电影天堂| 啊?嗯?轻一点~啊视频| 成人做爰A片动图| 日本大学生第一次三级| 陪读妇乱子交换小说黄文| 久久九九久精品国产免费直播小说| 欧美午夜无码大片免费看| 青青草无限次破解版污| 我在狂野截了一段小视频| 亚洲欧美日韩电影| 一代女皇A片艳史电影电影金凤凰| 小嫩苞h文高辣h文| 免费国产午夜高清在线视频| 大爆乳风间由美XXOO在线观看 | 人与畜禽狗Croproation| 每晚都被他添的流好多水想要| 妈妈夹的好紧…爽死我了| 秘密关卡在线观看| 挤入稚嫩小身子| 秘书高跟黑色丝袜国产91在线| 摸进她的内裤里疯狂揉她公交车| 男总裁被猛男按着躁到爽H漫画| 美女的隐私?无遮挡的网站| 极品人体西西44f大尺度| 在电影院我被他摸得受不了了| 西门庆无删减版三级在线看| 国产精品爱久久久久久久电影蜜臀 | 91约啪| 亚洲娇小被黑人巨大撑爆Sex| 熟女?人妻キャンペーンPUBG|