日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品一级少妇久久久久久久 | 亚洲精品中文字幕乱码三区 | 青草青青视频 | 国产又粗又大又硬 | 色姑娘av| 亚洲精品视频导航 | 日韩精品1区2区 | 99re在线视频免费观看 | 日韩在线不卡av | 成人中文字幕+乱码+中文字幕 | 久久影视网 | 精品久久亚洲 | 福利电影一区 | 日本xx视频免费观看 | 手机看片福利视频 | 小色瓷导航 | 97福利社 | 在线能看的av | 美女网站在线免费观看 | 久久久久一区二区三区 | 成人日批视频 | 日韩在线第一 | 日本一区二区成人 | 精产国品一区二区三区 | 一级黄色网址 | 中文在线观看免费 | 人人妻人人爽欧美成人一区 | 久久99草 | 男女野外做受全过程 | 小泽玛丽亚在线观看 | 九九精品免费 | 欧美日韩在线免费观看 | 久久精品噜噜噜成人 | 少妇高潮一区二区三区99小说 | 乳色吐息在线观看 | 里番acg★同人里番本子大全 | 一区二区欧美视频 | 精品国产传媒 | 99在线视频免费观看 | 97人人爱 | 五月天欧美| 国产一二区在线观看 | 88福利视频 | 美女被爆操网站 | 麻豆人妻少妇精品无码专区 | 欧洲精品无码一区二区 | 在线一二区 | 国产99999| 国产午夜啪啪 | 欧美高清一区二区 | 九一亚洲精品 | 成人久久在线 | 91亚洲精华国产精华精华液 | 日韩精品一区二区三区久久 | 三级国产在线观看 | 日韩成人av免费在线观看 | 久久精品欧美一区二区 | 久久在线免费观看视频 | 免费观看毛片视频 | 国产成人无码性教育视频 | 国产精品18久久久久久久久 | 亚洲精品乱码久久久久久日本蜜臀 | 四虎tv | 免费a在线观看 | 少妇毛片一区二区三区粉嫩av | 国内精品久久久久久久久 | 亚洲小视频 | 制服丝袜成人动漫 | 国产不卡视频在线播放 | 亚洲网站免费 | 丁香婷婷综合激情五月色 | 在线视频 中文字幕 | 一区二区三区久久久久 | 亚洲国产不卡 | 美女在线网站 | 黄网站在线播放 | 精品不卡在线 | 黑人玩弄人妻一区二 | 欧美a一级片 | 亚洲国产欧美日韩在线 | 人妻 丝袜美腿 中文字幕 | 久久国产精品系列 | 婷婷丁香六月 | 精品无码久久久久久久久果冻 | 欧产日产国产精品 | 污视频网站免费在线观看 | av中文在线播放 | 丰满人妻一区二区三区大胸 | 日本视频免费 | 亚洲综合精品在线 | 日韩免费黄色 | 在线观看av网 | 精品一区二区毛片 | 久久久久久久久久网 | 老司机亚洲精品 | 美女av网址 | 打美女屁股网站 | 娇小的粉嫩xxx极品 国产精品人人爽人人爽 | 六月婷婷中文字幕 |