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

mysql聯(lián)合索引的使用規(guī)則

 更新時間:2021年06月23日 09:30:57   作者:有種放學你別走  
本文主要介紹了mysql聯(lián)合索引的具體使用,結合實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下

聯(lián)合索引又叫復合索引。對于復合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當最左側字段是常量引用時,索引就十分有效。

從一道有趣的題目開始分析:

假設某個表有一個聯(lián)合索引(c1,c2,c3,c4)以下選項哪些字段使用了該索引:
A where c1=x and c2=x and c4>x and c3=x
B where c1=x and c2=x and c4=x order by c3
C where c1=x and c4= x group by c3,c2
D where c1=? and c5=? order by c2,c3
E where c1=? and c2=? and c5=? order by c2,c3

下面我們開始:

首先創(chuàng)建表:

CREATE TABLE t(
c1 CHAR(1) not null,
c2 CHAR(1) not null,
c3 CHAR(1) not null,
c4 CHAR(1) not null,
c5 CHAR(1) not null
)ENGINE myisam CHARSET UTF8;


有c1到c5 5個字段,特別說明一下 字段類型都是定長char(1)類型,并且非空,字符集是utf8(與計算索引使用字節(jié)數(shù)有關)

創(chuàng)建索引:

alter table t add index c1234(c1,c2,c3,c4);

插入2條數(shù)據(jù):insert into t VALUES('1','1','1','1','1'),('2','2','2','2','2')

使用MySql Explain開始分析題目結果:

A選項:


結果可以看出,c1,c2,c3,c4均使用到了該索引,而我們對A結果稍作更改:

將c2條件去掉后:


根據(jù)索引最左原則,c2字段沒有使用索引,c2之后的字段都不能使用索引。下面2圖我們對比下索引最左原則:


上圖結果顯示直接使用c3是全表查詢,無法使用該索引的,所以c3字段使用索引的前提是c1,c2兩字段均使用了索引。

即是索引的最左原則(左前綴原則)。

B選項:


key_len長度說明c1,c2字段用到了該索引,Extra顯示并沒有使用臨時表進行排序,說明排序是使用了索引的,但并沒有計算在key_len值中,也沒有起到連接c4的作用,說明索引到c3這里是斷掉的。

排序其實是利用聯(lián)合索引直接完成了的,即:使用了c1234聯(lián)合索引,就已經(jīng)使得c1下c2,c2下c3,c3下c4是有序的了,所以實際是排序利用了索引,c3字段并沒有使用該索引。(這段寫的時候總感覺有點別扭,不知道我理解的對不對,還有待更深層次的研究)

C選項:


使用group by 一般先生成臨時文件,再進行排序,但是字段順序為c2,c3時,并沒有用臨時表進行排序,而是利用索引排序好的;當group by字段為c3,c2時,由于與索引字段順序不一致,所以分組和排序并沒有利用到索引。

由key_len長度確定,只有c1一個字段使用了索引。

D選項:


order by 和group by 類似,字段順序與索引一致時,會使用索引排序;字段順序與索引不一致時,不使用索引。

由key_len長度確定,只有c1一個字段使用了索引。

E選項:


其實選項E的結果分析在上述ABCD的結果中都分析過了,這里只有c1,c2字段使用了該索引。

綜上所述問題答案:

A:四個字段均使用了該索引

B:c1,c2字段使用了該索引

C:c1字段使用該索引

D:c1字段使用該索引

E:c1,c2字段使用了該索引

總結:

索引的最左原則(左前綴原則),如(c1,c2,c3,c4....cN)的聯(lián)合索引,where 條件按照索引建立的字段順序來使用(不代表and條件必須按照順序來寫),如果中間某列沒有條件,或使用like會導致后面的列不能使用索引。

索引也能用于分組和排序,分組要先排序,在計算平均值等等。所以在分組和排序中,如果字段順序可以按照索引的字段順序,即可利用索引的有序特性。

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

相關文章

  • mysql之validate_password_policy的使用

    mysql之validate_password_policy的使用

    這篇文章主要介紹了mysql之validate_password_policy的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • MySQL主從復制原理詳情

    MySQL主從復制原理詳情

    這篇文章主要介紹了MySQL主從復制原理詳情,MySQL?主從復制是指數(shù)據(jù)可以從一個MySQL數(shù)據(jù)庫服務器主節(jié)點復制到一個或多個從節(jié)點,文章圍繞主題展開詳細的內容介紹。感興趣的小伙伴可以參考一下
    2022-06-06
  • Mysql auto_increment 重新計數(shù)(讓id從1開始)

    Mysql auto_increment 重新計數(shù)(讓id從1開始)

    當清空一個表的時候,重新插入數(shù)據(jù),發(fā)現(xiàn)auto_increment屬性的字段計數(shù)不是從1開始的時候,可以使用以下命令
    2012-12-12
  • 解決sql server不支持variant數(shù)據(jù)類型的問題

    解決sql server不支持variant數(shù)據(jù)類型的問題

    在數(shù)據(jù)庫中,數(shù)據(jù)類型是非常重要的,但有時候我們可能會遇到 SQL Server 不支持的數(shù)據(jù)類型,例如 Variant,在本篇博文中,我們將探討問題的背景,提供解決思路,并總結如何解決 SQL Server 不支持 Variant 數(shù)據(jù)類型的挑戰(zhàn)
    2023-09-09
  • MySQL如何實現(xiàn)跨庫join查詢

    MySQL如何實現(xiàn)跨庫join查詢

    這篇文章主要介紹了MySQL如何實現(xiàn)跨庫join查詢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MySQL存儲過程的深入講解(in、out、inout)

    MySQL存儲過程的深入講解(in、out、inout)

    這篇文章主要給大家介紹了關于MySQL存儲過程(in、out、inout)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • MYSQL ON UPDATE CURRENT_TIMESTAMP當字段值發(fā)生改變時才會更新記錄的時間

    MYSQL ON UPDATE CURRENT_TIMESTAMP當字段值發(fā)生改變時才會更

    本文主要介紹了MYSQL ON UPDATE CURRENT_TIMESTAMP當字段值發(fā)生改變時才會更新記錄的時間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • MySQL 添加注釋(comment)的方法步驟

    MySQL 添加注釋(comment)的方法步驟

    本文主要介紹了MySQL添加注釋(comment)的方法步驟,字段或列的注釋是用屬性comment來添加,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 如何使用索引提高查詢速度

    如何使用索引提高查詢速度

    本篇文章是對使用索引提高查詢速度的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 詳解MySQL中default的使用

    詳解MySQL中default的使用

    這篇文章主要介紹了MySQL中default的使用,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05

最新評論