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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 索引合并_MySQL 索引合并(Index Merge)优化

發(fā)布時間:2025/3/15 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 索引合并_MySQL 索引合并(Index Merge)优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文問題

什么是Index Merge?Index Merge的限制有哪些?

如何查看語句是否使用了Index Merger?

Index Merge有哪幾種?分別適用于那些情景?

如何控制優(yōu)化器是否使用Index Merge

Index Merge 索引合并

索引合并檢索方法可以檢索多個范圍掃描并將結(jié)果合并。這種訪問方法只能合并同一個表的索引掃描,不能合并跨表掃描。

合并可能生成基礎(chǔ)掃描結(jié)果的"并集","交集",或者"交集的并集"

示例:

SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;

SELECT * FROM tbl_name

WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;

SELECT * FROM t1, t2

WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')

AND t2.key1 = t1.some_col;

SELECT * FROM t1, t2

WHERE t1.key1 = 1

AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);

Index Merge的已知缺陷

如果在WHERE語句中,存在多層嵌套的AND/OR,MySQL可能不會選擇最優(yōu)的方案,可以嘗試通過拆分WHERE子句的條件來進(jìn)行轉(zhuǎn)換:

(x AND y) OR z => (x OR z) AND (y OR z)

(x OR y) AND z => (x AND z) OR (y AND z)

Index Merger不能應(yīng)用于全文索引(fulltext index)

Index Merge的EXPLAIN輸出

type列的值顯示為index_merge

key列顯示使用的索引列表

key_len列顯示這些索引的最大長度(列表)。

Extra列顯示Index Merge的算法:

Using intersect(...)

Using union(...)

Using sort_union(...)

mysql> explain select * from test_merge where (col1<10 and col2>50) or col3=50;

+----+-------------+------------+------------+-------------+---------------+---------------+---------+------+------+----------+----------------------------------------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+------------+------------+-------------+---------------+---------------+---------+------+------+----------+----------------------------------------------+

| 1 | SIMPLE | test_merge | NULL | index_merge | idx_1_2,idx_3 | idx_1_2,idx_3 | 5,5 | NULL | 214 | 100.00 | Using sort_union(idx_1_2,idx_3); Using where |

+----+-------------+------------+------------+-------------+---------------+---------------+---------+------+------+----------+----------------------------------------------+

1 row in set, 1 warning (0.00 sec)

mysql> explain select * from test_merge where (col1=10 and col2=50) or col3=50;

+----+-------------+------------+------------+-------------+---------------+---------------+---------+------+------+----------+-----------------------------------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+------------+------------+-------------+---------------+---------------+---------+------+------+----------+-----------------------------------------+

| 1 | SIMPLE | test_merge | NULL | index_merge | idx_1_2,idx_3 | idx_1_2,idx_3 | 10,5 | NULL | 22 | 100.00 | Using union(idx_1_2,idx_3); Using where |

+----+-------------+------------+------------+-------------+---------------+---------------+---------+------+------+----------+-----------------------------------------+

1 row in set, 1 warning (0.00 sec)

Index Merge 算法

Index Merge Intersection 索引合并交集

這種方法適用于WHERE子句中的條件是通過AND結(jié)合的不同索引的范圍條件時,其中的每個條件都需要滿足下列條件之一:

如果其中的索引是多列索引,條件中需要包括索引的所有列

key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN

在Innodb表的主鍵上的范圍條件

示例:

SELECT * FROM innodb_table

WHERE primary_key < 10 AND key_col1 = 20;

SELECT * FROM tbl_name

WHERE key1_part1 = 1 AND key1_part2 = 2 AND key2 = 2;

索引合并交集算法在所有使用的索引上同時進(jìn)行掃描,并從掃描結(jié)果中生成行的交集

如果查詢中的所有列都被使用的索引覆蓋,不需要檢索所有表行(EXPLAIN輸出中的Extra列中包括Using index)。例如這個語句:

SELECT COUNT(*) FROM t1 WHERE key1 = 1 AND key2 = 1;

如果使用的索引沒有覆蓋查詢中所有的行,只有當(dāng)所有使用的索引的范圍條件滿足時才檢索整個行。

如果合并條件中包括Innodb表主鍵索引條件,主鍵并不用來檢索數(shù)據(jù),而是用來篩選使用其他條件檢索出的行。 # 就是先通過其他的范圍條件篩選出一部分?jǐn)?shù)據(jù),在從這部分?jǐn)?shù)據(jù)中,通過主鍵來篩選出最終的結(jié)果

Index Merge Union 索引合并并集

這種方法適用于WHERE子句中的條件是通過OR結(jié)合的不同索引的范圍條件時,其中的每個條件都需要滿足下列條件之一:

如果其中的索引是多列索引,條件中需要包括索引的所有列

key_part1 = const1 AND key_part2 = const2 ... AND key_partN = constN

在Innodb表的主鍵上的范圍條件

適用于Index Merger intersection算法的條件

示例:

SELECT * FROM t1

WHERE key1 = 1 OR key2 = 2 OR key3 = 3;

SELECT * FROM innodb_table

WHERE (key1 = 1 AND key2 = 2)

OR (key3 = 'foo' AND key4 = 'bar') AND key5 = 5;

Index Merge Sort_Union

這種方法適用于WHERE子句中的條件是通過OR結(jié)合的不同索引的范圍條件,但是不能使用Index Merge Union算法的情景

示例:

SELECT * FROM tbl_name

WHERE key_col1 < 10 OR key_col2 < 20;

SELECT * FROM tbl_name

WHERE (key_col1 > 10 OR key_col2 = 20) AND nonkey_col = 30;

sort_union和union算法的區(qū)別是,sort_union必須在返回行數(shù)據(jù)前先獲取行ID并對行ID進(jìn)行排序。

禁用Index Merge

在optimizer_swith中有4個關(guān)于Index Merge的變量:

index_merge,index_merge_intersection,index_merge_union,index_merge_sort_union

默認(rèn)情況下都是啟用的。要單獨啟用某個算法,設(shè)置index_merge=off,并將相應(yīng)的標(biāo)志設(shè)置為on

問題答案

什么是Index Merge?Index Merge的限制有哪些?

如果查詢中使用到了不同的索引,可以對不同索引的條件分別進(jìn)行范圍掃描,然后將掃描結(jié)果合并得到最終的結(jié)果,這就是Index Merge。

限制:只能合并同一個表的索引掃描結(jié)果,不能跨表合并。此外,無法對fulltext索引進(jìn)行合并

如何查看語句是否使用了Index Merge?

EXPLAIN中type列的值為index_merge表示使用了索引合并。根據(jù)索引合并算法的不同,會在Extra列中顯示Using intersect/union/sort_union

Index Merge有哪幾種?分別適用于那些情景?

3種:Intersection,Union,Sort_union

Intersection:使用AND結(jié)合的關(guān)于不同索引的條件(普通索引的等值表達(dá)式或者主鍵索引的范圍表達(dá)式)

Union和Sort Union:使用OR結(jié)合的關(guān)于不同索引的范圍條件

區(qū)別:當(dāng)條件為普通索引的等值表達(dá)式或者主鍵索引的范圍表達(dá)式時,可以使用Union。其他不符合條件的只能使用Sort Union

如果包括多列索引,在范圍條件中需要包括索引中的所有列。

如何控制優(yōu)化器是否使用Index Merge

在optimizer_swith中有4個關(guān)于Index Merge的變量:

index_merge,index_merge_intersection,index_merge_union,index_merge_sort_union

默認(rèn)情況下都是啟用的。要單獨啟用某個算法,設(shè)置index_merge=off,并將相應(yīng)的標(biāo)志設(shè)置為on

總結(jié)

以上是生活随笔為你收集整理的mysql 索引合并_MySQL 索引合并(Index Merge)优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品一区二区三区日韩 | 精品综合| gai视频在线观看资源 | av在线影片 | 久久国产电影 | av我不卡| 国产男女猛烈无遮挡a片漫画 | 理论片91 | 大波大乳videos巨大 | 美女自拍视频 | 外国黄色网 | 欧美激情婷婷 | 亚洲欧美成人一区二区三区 | 亚洲小视频 | 制服.丝袜.亚洲.中文.综合懂色 | 5566毛片| 亚洲国产精品电影 | 生活片毛片 | 丝袜ol美脚秘书在线播放 | 日日做夜夜爽毛片麻豆 | 手机av中文字幕 | 天天干天天爽天天射 | 精品人妻二区中文字幕 | 在线观看成年人网站 | 97精品一区二区视频在线观看 | 国产日韩欧美激情 | 好吊妞视频这里只有精品 | 国产亚洲精品久久久久久青梅 | 黄色大片日本 | 午夜插插插 | 亚洲男人天堂2018 | 拍真实国产伦偷精品 | 热播网 | 国产在线视频网址 | 国产精品一卡二卡三卡 | 91人人爽 | 永久免费观看av | 欧美影院在线观看 | 色爽交 | 国产又黄又猛又粗又爽 | 欧美日韩一区二区三区69堂 | 2020狠狠干| 无码人妻精品一区二区三区温州 | 深夜激情影院 | 伊人久久麻豆 | 午夜精品久久久 | 中文字幕av无码一区二区三区 | av少妇| 国产精品麻豆一区二区三区 | 国产午夜电影在线观看 | 亚洲视频免费 | 2021国产在线视频 | 久久视精品 | 奇米第四色777 | 91视频影院| 黑人操中国女人视频 | 国产美女一区二区三区 | 久久精品8 | 色婷婷久久综合中文久久蜜桃av | 国产一级一级国产 | 欧美日韩国 | 久久久夜精品 | 国产精品免费一区二区三区 | 精品国产一区二区三区日日嗨 | 亚洲图片一区二区三区 | 三上悠亚影音先锋 | 亚洲自拍中文字幕 | 国产白浆在线观看 | 太久av| 亚洲深夜视频 | 麻豆精品国产传媒av绿帽社 | 一级aa毛片| 日韩色| 无套内谢少妇毛片 | 88av网| 天堂аⅴ在线最新版在线 | 欧美亚洲国产日韩 | 不卡的av电影 | 亚洲理伦 | 男人的天堂av女优 | www.自拍偷拍 | 97超碰成人 | 蜜桃av成人永久免费 | 国产精品美女久久久久av超清 | 日韩av一区在线观看 | mm1313亚洲国产精品美女 | 国产精品成人免费视频 | 人妻av中文系列 | 中文字幕在线日本 | 激情综合六月 | 欧美精品二区三区 | 欧美日韩免费 | 永久在线免费观看 | 丰满少妇理论片 | 熟女国产精品一区二区三 | 一区二区在线影院 | 手机在线视频一区 | 黄色一级免费大片 | av在线首页|