中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql索引合并的使用方法

發布時間:2021-08-26 18:18:31 來源:億速云 閱讀:186 作者:chen 欄目:開發技術

這篇文章主要講解了“mysql索引合并的使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql索引合并的使用方法”吧!

索引合并是通過多個range類型的掃描并且合并它們的結果集來檢索行的。僅合并來自單個表的索引掃描,而不是跨多個表的索引掃描。合并會產生底層掃描的三種形式:unions(合并)、intersections(交集)、unions-of-intersections(先取交集再合并)。

以下四個例子會產生索引合并:

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);

索引合并有以下已知的局限性:

1、如果查詢語句包含一個帶有嚴重AND/OR嵌套的復雜的WHERE子句而MySQL沒有選擇最佳計劃,那么可以嘗試使用以下的標志符轉換:

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

2、索引合并不適用于全文索引。

在 EXPLAIN 語句輸出的信息中,索引合并在type列中表現為“index_merge”,在這種情況下,key列包含使用的索引列表。
索引合并訪問方法有幾種算法,表現在 EXPLAIN 語句輸出的Extra字段中:

Using intersect(...)
Using union(...)
Using sort_union(...)

下面將更詳細地描述這些算法。優化器根據各種可用選項的成本估計,在不同的索引合并算法和其他訪問方法之間進行選擇。

Index Merge Intersection算法

Index Merge Intersection算法對所有使用的索引執行同步掃描,并生成從合并的索引掃描接收到的行序列的交集。
這種算法適用于當WHERE子句被轉換成多個使用AND連接的不同索引key上的范圍條件,且條件是以下兩種之一:

一、這種形式的N部分表達式,索引正好包括N個字段(所有索引字段都被覆蓋),N>=1,N如果大于1就是復合索引:

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;

Index Merge Union算法

該算法類似于Index Merge Intersection算法,適用于當WHERE子句被轉換成多個使用OR連接的不同索引key上的范圍條件,且條件是以下三種之一:

一、這種形式的N部分表達式,索引正好包括N個字段(所有索引字段都被覆蓋),N>=1,N如果大于1就是復合索引:

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

二、InnoDB表主鍵上的任何范圍條件。
三、符合Index Merge 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連接的不同索引key上的范圍條件,但是不符合 Index Merge Union算法的。Index Merge Sort-Union和Index Merge Union算法的區別在于,Index Merge Sort-Union必須首先獲取所有行的行id并在返回任何行之前對它們進行排序。

例子:

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;

感謝各位的閱讀,以上就是“mysql索引合并的使用方法”的內容了,經過本文的學習后,相信大家對mysql索引合并的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌南县| 高尔夫| 黔西| 瑞安市| 玉屏| 赫章县| 泰和县| 城步| 亚东县| 义马市| 南平市| 遵义县| 天津市| 龙口市| 巫溪县| 汉阴县| 河间市| 建平县| 含山县| 莱州市| 江陵县| 五峰| 布尔津县| 瓦房店市| 井陉县| 塔城市| 旬邑县| 泾阳县| 济宁市| 环江| 临武县| 巢湖市| 嘉峪关市| 延川县| 利津县| 温泉县| 全南县| 白银市| 瑞昌市| 元阳县| 如东县|