欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql 索引合并的使用

 更新時(shí)間:2021年08月26日 15:55:05   作者:camellia  
索引合并是mysql底層為我們提供的智能算法。本文就介紹了mysql 索引合并的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

索引合并是mysql底層為我們提供的智能算法。了解索引合并的算法,有助于我們更好的創(chuàng)建索引。

索引合并是通過(guò)多個(gè)range類(lèi)型的掃描并且合并它們的結(jié)果集來(lái)檢索行的。僅合并來(lái)自單個(gè)表的索引掃描,而不是跨多個(gè)表的索引掃描。合并會(huì)產(chǎn)生底層掃描的三種形式:unions(合并)、intersections(交集)、unions-of-intersections(先取交集再合并)。

以下四個(gè)例子會(huì)產(chǎn)生索引合并:

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、如果查詢語(yǔ)句包含一個(gè)帶有嚴(yán)重AND/OR嵌套的復(fù)雜的WHERE子句而MySQL沒(méi)有選擇最佳計(jì)劃,那么可以嘗試使用以下的標(biāo)志符轉(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)

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

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

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

下面將更詳細(xì)地描述這些算法。優(yōu)化器根據(jù)各種可用選項(xiàng)的成本估計(jì),在不同的索引合并算法和其他訪問(wèn)方法之間進(jìn)行選擇。

Index Merge Intersection算法

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

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

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算法

該算法類(lèi)似于Index Merge Intersection算法,適用于當(dāng)WHERE子句被轉(zhuǎn)換成多個(gè)使用OR連接的不同索引key上的范圍條件,且條件是以下三種之一:

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

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算法

該算法適用于當(dāng)WHERE子句被轉(zhuǎn)換成多個(gè)使用OR連接的不同索引key上的范圍條件,但是不符合 Index Merge Union算法的。Index Merge Sort-Union和Index Merge Union算法的區(qū)別在于,Index Merge Sort-Union必須首先獲取所有行的行id并在返回任何行之前對(duì)它們進(jìn)行排序。

例子:

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;

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

相關(guān)文章

  • mysql數(shù)據(jù)庫(kù)優(yōu)化必會(huì)的幾個(gè)參數(shù)中文解釋

    mysql數(shù)據(jù)庫(kù)優(yōu)化必會(huì)的幾個(gè)參數(shù)中文解釋

    對(duì)于自己配置mysql數(shù)據(jù)庫(kù)的朋友,需要注意的幾點(diǎn),下面都是英文的解釋?zhuān)容^易懂方便和我一樣需要優(yōu)化配置mysql的朋友
    2008-09-09
  • mysql 復(fù)制過(guò)濾重復(fù)如何解決

    mysql 復(fù)制過(guò)濾重復(fù)如何解決

    在進(jìn)行mysql復(fù)制過(guò)程中,會(huì)出現(xiàn)數(shù)據(jù)重復(fù)的現(xiàn)象,怎樣利用mysql 過(guò)濾重復(fù)的數(shù)據(jù)呢?本文將提供詳細(xì)的解決方法,需要了解的朋友可以參考下
    2012-11-11
  • MySQL表自增id溢出的故障復(fù)盤(pán)解決

    MySQL表自增id溢出的故障復(fù)盤(pán)解決

    這篇文章主要介紹了MySQL表自增id溢出的故障復(fù)盤(pán)解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C#編寫(xiě)方法實(shí)例

    C#編寫(xiě)方法實(shí)例

    在下面的練習(xí)中,將創(chuàng)建一個(gè)應(yīng)用程序,它包含的一個(gè)方法能夠計(jì)算一名顧問(wèn)的收費(fèi)金額——假定該顧問(wèn)每天收取固定的費(fèi)用,將根據(jù)工作了多少天來(lái)收費(fèi)。首先要開(kāi)發(fā)應(yīng)用程序的邏輯,然后利用“生成方法存根向?qū)А眮?lái)寫(xiě)出這個(gè)邏輯使用的方法。接著,我們將在一個(gè)控制臺(tái)應(yīng)用程序中運(yùn)行方法,以獲得對(duì)該程序的最終印象。最后,我們將使用Visual Studio 2005調(diào)試器來(lái)檢查方法調(diào)用。
    2008-04-04
  • MySql實(shí)現(xiàn)翻頁(yè)查詢功能

    MySql實(shí)現(xiàn)翻頁(yè)查詢功能

    分頁(yè)查詢?cè)诰W(wǎng)頁(yè)中隨處可見(jiàn),那原理是什么呢?下面簡(jiǎn)單介紹一下基于MySql數(shù)據(jù)庫(kù)的limit實(shí)現(xiàn)方法,感興趣的朋友一起看看吧
    2019-11-11
  • Debian 6.02 (squeeze)下編譯安裝 MySQL 5.5的方法

    Debian 6.02 (squeeze)下編譯安裝 MySQL 5.5的方法

    Debian 6.02 (squeeze)下編譯安裝 MySQL 5.5的方法,需要的朋友可以參考下。
    2011-12-12
  • MySQL導(dǎo)出數(shù)據(jù)遇到secure-file-priv問(wèn)題的解決方法

    MySQL導(dǎo)出數(shù)據(jù)遇到secure-file-priv問(wèn)題的解決方法

    這篇文章主要為大家詳細(xì)介紹了MySQL導(dǎo)出數(shù)據(jù)遇到secure-file-priv問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • mysql用一個(gè)表更新另一個(gè)表的方法

    mysql用一個(gè)表更新另一個(gè)表的方法

    下面小編就為大家?guī)?lái)一篇mysql用一個(gè)表更新另一個(gè)表的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • MySQL從命令行導(dǎo)入SQL腳本時(shí)出現(xiàn)中文亂碼的解決方法

    MySQL從命令行導(dǎo)入SQL腳本時(shí)出現(xiàn)中文亂碼的解決方法

    這篇文章主要介紹了MySQL從命令行導(dǎo)入SQL腳本時(shí)出現(xiàn)中文亂碼的解決方法,分析了中文亂碼出現(xiàn)的原因并給出了兩種解決方法供大家參考,需要的朋友可以參考下
    2016-09-09
  • MySQL實(shí)現(xiàn)差集(Minus)和交集(Intersect)測(cè)試報(bào)告

    MySQL實(shí)現(xiàn)差集(Minus)和交集(Intersect)測(cè)試報(bào)告

    MySQL沒(méi)有實(shí)現(xiàn)Minus和Intersect功能,就像它也沒(méi)有實(shí)現(xiàn)cube的功能一樣。
    2014-06-06

最新評(píng)論