MySQL單列索引和聯合索引

2021-06-19 05:08:22 字數 1538 閱讀 3966

**:

所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。

乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。

對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁碟空間。在create table語句中索引列字首的語法看起來像這樣:

key index_name (col_name(length))

下面的例子為name列的頭10個字元建立乙個索引:

mysql> create table test (

name char(200) not null,

key index_name (name(10)));

對於blob和text列,你必須索引列的字首,你不能索引列的全部。

多列索引

mysql能在多個列上建立索引。乙個索引可以由最多15個列組成。(在char和varchar列上,你也可以使用列的字首作為乙個索引的部分)。

乙個多重列索引可以認為是包含通過合併(concatenate)索引列值建立的值的乙個排序陣列。

當你為在乙個where子句索引的第一列指定已知的數量時,mysql以這種方式使用多重列索引使得查詢非常快速,即使你不為其他列指定值。

假定一張表使用下列說明建立:

mysql> create table test (

id int not null,

last_name char(30) not null,

first_name char(30) not null,

primary key (id),

index name (last_name,first_name));

那麼索引name是乙個在last_name和first_name上的索引,這個索引將被用於在last_name或last_name和first_name的乙個已知範圍內指定值的查詢,因此,name索引將使用在下列查詢中:

mysql> select * from test where last_name=」widenius」;

mysql> select * from test where last_name=」widenius」

and first_name=」michael」;

mysql> select * from test where last_name=」widenius」

and (first_name=」michael」 or first_name=」monty」);

mysql> select * from test where last_name=」widenius」

and first_name >=」m」 and first_name < "n";

然而,name索引將不用在下列詢問中:

mysql> select * from test where first_name=」michael」;

mysql> select * from test where last_name=」widenius」

or first_name=」michael」;

MySQL單列索引和聯合索引

mysql單列索引和聯合索引 所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁...

MySQL單列索引和聯合索引

mysql單列索引和聯合索引 所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁...

MySQL單列索引和聯合索引

mysql單列索引和聯合索引 所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁...