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

主頁 > 知識(shí)庫 > 一篇文章讀懂什么是MySQL索引下推(ICP)

一篇文章讀懂什么是MySQL索引下推(ICP)

熱門標(biāo)簽:高清地圖標(biāo)注道路 話務(wù)外呼系統(tǒng)怎么樣 臨清電話機(jī)器人 400電話可以辦理嗎 智能外呼系統(tǒng)復(fù)位 云南電商智能外呼系統(tǒng)價(jià)格 拉卡拉外呼系統(tǒng) 大眾點(diǎn)評(píng)星級(jí)酒店地圖標(biāo)注 外東北地圖標(biāo)注

一、簡(jiǎn)介

ICP(Index Condition Pushdown)是在MySQL 5.6版本上推出的查詢優(yōu)化策略,把本來由Server層做的索引條件檢查下推給存儲(chǔ)引擎層來做,以降低回表和訪問存儲(chǔ)引擎的次數(shù),提高查詢效率。

二、原理

為了理解ICP是如何工作的,我們先了解下沒有使用ICP的情況下,MySQL是如何查詢的:

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

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

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

三、實(shí)踐

先創(chuàng)建一張表,并插入記錄

CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT COMMENT "主鍵",
name varchar(32)  COMMENT "姓名",
city varchar(32)  COMMENT "城市",
age int(11)  COMMENT "年齡",
primary key(id),
key idx_name_city(name, city)
)engine=InnoDB default charset=utf8;

insert into user(name, city, age) values("ZhaoDa", "BeiJing", 20),("QianEr", "ShangHai", 21),("SunSan", "GuanZhou", 22), ("LiSi", "ShenZhen", 24), ("ZhouWu", "NingBo", 25),  ("WuLiu", "HangZhou", 26), ("ZhengQi", "NanNing", 27), ("WangBa", "YinChuan", 28), ("LiSi", "TianJin", 29), ("ZhangSan", "NanJing", 30), ("CuiShi", "ZhengZhou", 65),  ("LiSi", "KunMing", 29), ("LiSi", "ZhengZhou", 30);

查看一下表記錄

mysql> select * from user;
+----+----------+-----------+------+
| id | name     | city      | age  |
+----+----------+-----------+------+
|  1 | ZhaoDa   | BeiJing   |   20 |
|  2 | QianEr   | ShangHai  |   21 |
|  3 | SunSan   | GuanZhou  |   22 |
|  4 | LiSi     | ShenZhen  |   24 |
|  5 | ZhouWu   | NingBo    |   25 |
|  6 | WuLiu    | HangZhou  |   26 |
|  7 | ZhengQi  | NanNing   |   27 |
|  8 | WangBa   | YinChuan  |   28 |
|  9 | LiSi     | TianJin   |   29 |
| 10 | ZhangSan | NanJing   |   30 |
| 11 | CuiShi   | ZhengZhou |   65 |
| 12 | LiSi     | KunMing   |   29 |
| 13 | LiSi     | ZhengZhou |   30 |
+----+----------+-----------+------+
13 rows in set (0.00 sec)

注意,這張表里創(chuàng)建了聯(lián)合索引(name, city),假設(shè)我們想查詢?nèi)缦抡Z句:

select * from user where name="LiSi" and city like "%Z%" and age > 25;

3.1 不使用索引下推

在不使用索引下推的情況下,根據(jù)聯(lián)合索引“最左匹配”原則,只有name列能用到索引,city列由于是模糊匹配,是不能用到索引的,此時(shí)的執(zhí)行過程是這樣的:

  1. 存儲(chǔ)引擎根據(jù)(name, city)聯(lián)合索引,找到name值為L(zhǎng)iSi的記錄,共4條記錄;
  2. 然后根據(jù)這4條記錄中的id值,逐一進(jìn)行回表掃描,去聚簇索引中取出完整的行記錄,并把這些記錄返回給Server層;
  3. Server層接收到這些記錄,并按條件name="LiSi" and city like "%Z%" and age > 25進(jìn)行過濾,最終留下("LiSi", "ZhengZhou", 30)這條記錄。

畫張圖看一下:

未使用使用索引條件下推

3.2 使用索引下推

使用索引下推的情況下,執(zhí)行過程是這樣的:

  • 存儲(chǔ)引擎根據(jù)(name, city)聯(lián)合索引,找到name='LiSi'的記錄,共4條;
  • 由于聯(lián)合索引中包含city列,存儲(chǔ)引擎直接在聯(lián)合索引中按city like "%Z%"進(jìn)行過濾,過濾后剩下2條記錄;
  • 根據(jù)過濾后的記錄的id值,逐一進(jìn)行回表掃描,去聚簇索引中取出完整的行記錄,并把這些記錄返回給Server層;
  • Server層根據(jù)WHERE語句的其它條件age > 25,再次對(duì)行記錄進(jìn)行篩選,最終只留下("LiSi", "ZhengZhou", 30)這條記錄。

畫張圖看一下:


使用索引條件下推

另外,從執(zhí)行計(jì)劃里也可以看到使用了索引下推(Extra里顯示Using index condition)

mysql> explain select * from user where name="LiSi" and city like "%Z%" and age > 25;
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key           | key_len | ref   | rows | filtered | Extra                              |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+------------------------------------+
|  1 | SIMPLE      | user  | NULL       | ref  | idx_name_city | idx_name_city | 99      | const |    4 |     7.69 | Using index condition; Using where |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+------------------------------------+
1 row in set, 1 warning (0.00 sec)

四、使用條件

  • 只能用于range、 ref、 eq_ref、ref_or_null訪問方法;
  • 只能用于InnoDB和 MyISAM存儲(chǔ)引擎及其分區(qū)表;
  • 對(duì)InnoDB存儲(chǔ)引擎來說,索引下推只適用于二級(jí)索引(也叫輔助索引);

tip:索引下推的目的是為了減少回表次數(shù),也就是要減少IO操作。對(duì)于InnoDB的聚簇索引來說,完整的行記錄已經(jīng)加載到緩存區(qū)了,索引下推也就沒什么意義了。

  • 引用了子查詢的條件不能下推;
  • 引用了存儲(chǔ)函數(shù)的條件不能下推,因?yàn)榇鎯?chǔ)引擎無法調(diào)用存儲(chǔ)函數(shù)。

五、相關(guān)系統(tǒng)參數(shù)

索引條件下推默認(rèn)是開啟的,可以使用系統(tǒng)參數(shù)optimizer_switch來控制器是否開啟。

查看默認(rèn)狀態(tài):

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)

切換狀態(tài):

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

總結(jié)

到此這篇關(guān)于什么是MySQL索引下推(ICP)的文章就介紹到這了,更多相關(guān)MySQL索引下推(ICP)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 五分鐘帶你搞懂MySQL索引下推
  • MySQL索引下推(ICP)的簡(jiǎn)單理解與示例
  • 五分鐘讓你快速弄懂MySQL索引下推
  • MySQL帶你秒懂索引下推

標(biāo)簽:山西 三明 阿里 揚(yáng)州 福州 定西 無錫 溫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一篇文章讀懂什么是MySQL索引下推(ICP)》,本文關(guān)鍵詞  一篇,文章,讀懂,什么,是,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一篇文章讀懂什么是MySQL索引下推(ICP)》相關(guān)的同類信息!
  • 本頁收集關(guān)于一篇文章讀懂什么是MySQL索引下推(ICP)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 天美麻花星空mv免费播放| 午夜艳客| 宝宝好大好深好涨水多| 日日噜噜噜噜人人爽亚洲精品| 多强被?c到爽??H小说| 久久这里只有精品18| 51cg吃瓜黑料| 国产在线真实子伦| 欲望中的女人2在线观看无删减版| 女人让男人操| 欧美护士18丝袜自慰性free| 婷婷久久一区二区字幕网址你懂得| 无码 人妻 一区二区三区| 肉铺团电影| 513xxoo动态图热点网| 丰满熟女寡妇喷潮XXX| 3D动漫超肉无修网站在线观看| 亚州无限乱码一二三四麻豆| 99久久亚洲精品日本无码| 国产中文字幕亚洲| 久草最新| 我丰满的岳?4呻吟声| 日本高清护士xxxxx| 嗯…啊摸湿内裤同桌小说| 啊啊啊不要轻点| 男人j戳女人p动态视频| 在公交车上被艹| 大佬们的病弱娇美人[穿书]| 污图动态图| 《年轻的老师4线在完整版韩剧》| 两个人看的www高清观看| 女神思瑞精品一区二区| 善良的岳HD中字伦理| 一级中国乱子伦视频| 最美情侣视频完整版免费观看| 午夜影院福利| 日本五十路六十30人8时间| 91精产国品一二三产区粉粉 | 男同桌上课又揉又摁我的胸| 了不起的老爸| 浪荡受NP双性合集|