mysql中復合索引語法 MySQL 復合索引

2021-10-17 13:29:53 字數 4245 閱讀 5903

mysql 復合索引

簡介:在本例中,您將了解mysql組合索引以及如何使用它來加速查詢。

mysql復合索引簡介

復合索引是多列的索引。mysql允許您建立乙個最多包含16列的復合索引。

復合索引也稱為多列索引。

查詢優化器將復合索引用於測試索引中所有列的查詢,或者測試第一列,前兩列等的查詢。

如果在索引定義中以正確的順序指定列,則單個復合索引可以在同乙個表上加速這些型別的查詢。

要在建立表時建立復合索引,請使用以下語句:

create table table_name (

c1 data_type primary key,

c2 data_type,

c3 data_type,

c4 data_type,

index index_name (c2,c3,c4)

在此語法中,復合索引由三列c2,c3和c4組成。

或者,您可以使用以下create index語句將復合索引新增到現有表:

create index index_name

on table_name(c2,c3,c4);

請注意,如果您在(c1,c2,c3)上有復合索引,則您將在以下列組合之一上建立索引搜尋功能:

(c1)

(c1,c2)

(c1,c2,c3)

例如:select

from

table_name

where

c1 = v1;

select

from

table_name

where

c1 = v1 and

c2 = v2;

select

from

table_name

where

c1 = v1 and

c2 = v2 and

c3 = v3;

如果列不形成索引的最左字首,則查詢優化器無法使用索引執行查詢。例如,以下查詢無法使用復合進行查詢:

select

from

table_name

where

c1 = v1 and

c3 = v3;

mysql綜合索引示例

我們將使用示例資料庫中的employees表進行演示。

| employees |

| employeenumber |

| lastname |

| firstname |

| extension |

| email |

| officecode |

| reportsto |

| jobtitle |

8 rows in set (0.14 sec)

以下語句在lastname和firstname列上建立復合索引:

create index name

on employees(lastname, firstname);

首先,name索引可用於指定lastname值的查詢中的查詢,因為lastname列是索引的最左字首。

其次,name索引可用於指定lastname和firstname值組合的值的查詢。

name索引用於在以下的查詢查詢:

1)查詢姓氏為的員工 patterson

select

firstname,

lastname,

email

from

employees

where

lastname = 'patterson';

此查詢使用名稱索引,因為索引的最左邊字首(即lastname列)用於查詢。

您可以通過explain在查詢中新增子句來驗證這一點:

explain select

firstname,

lastname,

email

from

employees

where

lastname = 'patterson';

這是輸出:

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

| 1 | ****** | employees | null | ref | name | name | 152 | const | 3 | 100.00 | null |

1 row in set, 1 warning (0.01 sec)

2)查詢姓氏patterson和名字的員工steve:

select

firstname,

lastname,

email

from

employees

where

lastname = 'patterson' and

firstname = 'steve';

在此查詢中,兩個lastname和firstname列都用於查詢,因此,它使用name索引。

我們來核實一下:

explain select

firstname,

lastname,

email

from

employees

where

lastname = 'patterson' and

firstname = 'steve';

輸出是:

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

| 1 | ****** | employees | null | ref | name | name | 304 | const,const | 1 | 100.00 | null |

1 row in set, 1 warning (0.08 sec)

3)查詢姓氏patterson和名字是steve或的員工mary:

select

firstname,

lastname,

email

from

employees

where

lastname = 'patterson' and

(firstname = 'steve' or

firstname = 'mary');

此查詢類似於第二個查詢,其中兩個lastname和firstname列都用於查詢。

以下語句驗證索引用法:

explain select

firstname,

lastname,

email

from

employees

where

lastname = 'patterson' and

(firstname = 'steve' or

firstname = 'mary');

輸出是:

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

| 1 | ****** | employees | null | range | name | name | 304 | null | 2 | 100.00 | using index condition |

1 row in set, 1 warning (0.00 sec)

查詢優化器不能在以下查詢中使用name索引進行查詢,因為只使用了firstname不是索引最左字首的列:

select

firstname,

lastname,

email

from

employees

where

firstname = 'leslie';

類似地,查詢優化器不能在以下查詢中使用名稱索引進行查詢,因為firstname或者lastname列用於查詢。

select

firstname,

lastname,

email

from

employees

where

firstname = 'anthony' or

lastname = 'steve';

在本教程中,您學習了如何使用mysql組合索引來加速查詢。

mysql 字首索引 語法 MySQL 字首索引

索引字首 使用 字串列的索引規範中的語法,您可以建立僅使用列首字元的索引 以這種方式僅索引列值的字首可以使索引檔案小得多。為a 或 column 編制索引時 必須為索引指定字首長度。例如 col name n nblobtext create table test blob col blob,ind...

mysql 字首索引 語法 mysql字首索引

應用場景 資料庫裡有個位址 address 字段,型別為varchar 100 業務決定了要經常根據address來進行查詢。確定選擇性 sql select count distinct address count as selectivity from info selectivity 0.87...

mysql 索引語法 MySQL索引的基本語法

索引是排好序的資料結構!可以用在 where 條件查詢的字段,和order by 排序的字段,有了索引,便可以快速地定位資料所在的實體地址並找出來。索引的分類 1.普通索引 normal 沒有任何約束,主要用於提高查詢效率 2.唯一索引 unique 在普通索引的基礎上增加了資料唯一性的約束,可以有...