日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 索引条件推送_MySQL 处理where条件 index condition pushdown索引条件下推

發布時間:2023/12/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 索引条件推送_MySQL 处理where条件 index condition pushdown索引条件下推 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

5.6之后,MySQL的優化技術

在使用二級索引過濾where條件時,減少回表的次數 以及 MySQL server層和引擎層交互的次數

1.數據庫如何處理where條件

index key(index first key? index last key)

確定sql查詢在索引中的連續范圍(起始+終止)

index filter

在起始到終止范圍之內,使用索引過濾不符合條件的記錄

table filter

不能使用索引處理了,回表(one by one),進行條件過濾

——————————

index first key 的提取規則

從索引(組合索引)的第一個鍵值開始

如果第一個鍵值存在,并且是=或者>=,則將該條件加入index first key,然后繼續判斷第二個鍵值,判斷條件一樣

如果遇到一個鍵值是>(范圍之后全失效),則將該條件加入index first key之后,終止

如果第一個鍵不存在(帶頭大哥不能死),終止

index last key 的提取規則

與index first key 相反

index filter 的提取規則

從索引的第一個鍵值開始

如果索引的第一個鍵值為=,則跳過,判斷第二個鍵值,判斷條件一樣

如果索引的第一列為> >= < <= 中的幾種,則,跳過第一列,將其余where 條件中,索引想過的列全部加入index filter中

如果索引的第一列為> >= < <= 之外的條件,則,將該條件以及where條件中所有與索引相關的列全部加入index filter中

如果第一列不包含查詢條件,則,將所有與索引相關的條件全部加入index filter中

table filter的提取條件

跟索引無關的列的查詢條件,全部加入table filter中

2.index condition pushdown

ICP

索引條件下推

提前執行

icp的優化用于 range ref eq_ref等訪問方法

innodb 和 myisam

idx_n_a(name,age)

select * from user where name < 'c' and age = 10

(1)不使用ICP

范圍之后全失效,僅僅會用到索引的第一列

從索引中one by one地取出符合條件的記錄,然后利用主鍵讀取整行

對記錄的完整行利用age=10這個條件進行判斷

重復上述過程直至沒有滿足條件的行

(2)使用ICP

從索引中one by one地取出符合條件的記錄,然后利用索引的其他字段的條件進行判斷

如果符合索引上的全部條件,才利用主鍵索引讀取完整行

使用了ICP之后,explain的結果extra列出現 using indexcondition

ICP的使用

(1)需要進行ICP優化的query語句,通常是where條件里面都是范圍查詢

(2)該查詢語句必須用到二級索引

(3)如果是覆蓋索引,直接index scan,就沒有必要進行ICP了

(4)innodb 和 myisam都可以

(5)ICP優化策略用于range ref eq_ref

(6)5.6之后的版本

總結

以上是生活随笔為你收集整理的mysql 索引条件推送_MySQL 处理where条件 index condition pushdown索引条件下推的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。