mysql聯合索引


聯合索引
概念
聯合索引又叫復合索引,即一個覆蓋表中兩列或者以上的索引,例如:

index_name(column a,column b)
1
創建方式
執行alter table語句時創建
alter table table_name add index index_name(column_list)
1
index_name是創建的聯合索引的名字,可以沒有,沒有的話系統會根據該索引包含的第一列來賦名稱;table_name是要創建該索引的表名;column_list為該索引所包含的表的字段名。

執行create index語句時創建
create index index_name on table_name(column_list)
1
此種情況是在表已經創建好的情況下,再來創建復合索引。index_name和column_list同上;table_name是要創建索引的表名。

例子
create table stu
(
id int,
name varchar(10),
age int,
primary key(id)
);
ALTER TABLE stu ADD INDEX LianHeIndex (name,age);
或者
create index LianHeIndex on stu(name,age);
1
2
3
4
5
6
7
8
9
10
執行上面的語句后在表stu中就創建好了一個名叫LianHeIndex聯合索引,在使用聯合索引的時候,我們遵守一個最左原則,即INDEX LianHeIndex (name,age)支持name|name age組合查詢,而不支持age查詢;換句話說,在執行

select * from stu where name=?
1
或者

select * from stu where name=? and age=?
1
時聯合索引才會有效,如果執行

select * from stu where age=?
1
則聯合索引不會生效。

如果我們是在name和age上分別創建單個索引的話,由於mysql查詢每次只能使用一個索引,所以雖然這樣已經相對不做索引時全表掃描提高了很多效率,但是如果在name、age兩列上創建復合索引的話將帶來更高的效率。如果我們創建了(name, age)的復合索引,那么其實相當於創建了(name)、(name,age)兩個索引,這被稱為最佳左前綴特性。

因此我們在創建復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。

注意事項
只要列中包含有NULL值都將不會被包含在索引中
復合索引中只要有一列含有NULL值,那么這一列對於此復合索引就是無效的,所以我們在數據庫設計時盡可能不要讓字段的默認值為NULL。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM