mysql單列索引和聯合索引
所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。
乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。
對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁碟空間。在create table語句中索引列字首的語法看起來像這樣:
key index_name (col_name(length))
下面的例子為name列的頭10個字元建立乙個索引:
createtable
test (
name
char(200) not
null
,key index_name (name(10)));
對於blob和text列,你必須索引列的字首,你不能索引列的全部。
多列索引
mysql能在多個列上建立索引。乙個索引可以由最多15個列組成。(在char和varchar列上,你也可以使用列的字首作為乙個索引的部分)。
乙個多重列索引可以認為是包含通過合併(concatenate)索引列值建立的值的乙個排序陣列。
當你為在乙個where子句索引的第一列指定已知的數量時,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索引將使用在下列查詢中:
select * from test where last_name=」widenius」;select * from test where last_name=」widenius」
and first_name=」michael」;
select * from test where last_name=」widenius」
and (first_name=」michael」 or first_name=」monty」);
select * from test where last_name=」widenius」
and first_name >=」m」 and first_name < "n";
然而,name索引將不用在下列詢問中:
select*from test where first_name=
」michael」;
select
*from test where last_name=
」widenius」
or first_name=」michael」;
MySQL單列索引和聯合索引
所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁碟空間。在create tab...
MySQL單列索引和聯合索引
mysql單列索引和聯合索引 所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁...
MySQL單列索引和聯合索引
mysql單列索引和聯合索引 所有的mysql列型別能被索引。在相關的列上的使用索引是改進select操作效能的最好方法。乙個表最多可有16個索引。最大索引長度是256個位元組,儘管這可以在編譯mysql時被改變。對於char和varchar列,你可以索引列的字首。這更快並且比索引整個列需要較少的磁...