- 索引優(yōu)點:
- 大大加快數(shù)據(jù)檢索速度。
- 唯一索引:保證表中每行數(shù)據(jù)的唯一性
- 加速表與表之間連接
- 在分組和排序子句中顯著減少分組和排序時間滤否。
- 索引缺點:
- 索引需要占用物理空間
- 增刪改脸狸,索引需要維護,降低數(shù)據(jù)的維護速度藐俺。
- 各種索引:
普通索引, 唯一索引, 主鍵索引, 候選索引, 聚集索引, 非聚集索引, 單獨索引炊甲,復(fù)合索引。
- 普通索引:
最基本的索引類型欲芹,沒有唯一性的限制卿啡。
創(chuàng)建方式:
1. create table <table_name>([...], index<index_name>)(column_name, ...)
CREATE TABLE T_YANJF_USER ( id VARCHAR(32) NOT NULL, user_name VARCHAR(100) NOT NULL, user_phone VARCHAR(11) NOT NULL, user_qq VARCHAR(11) NOT NULL, PRIMARY KEY (id), INDEX phone_index (user_phone) );
2. create index <index_name> on <table_name>(column_name, ...)
create index user_name_index on t_yanjf_user(user_name);
3. alter table <table_name> add index <index_name>(column_name, ...)
alter table t_yanjf_user add index user_qq_index(user_qq)
- 唯一索引:
不允許任意兩行有相同的索引值的索引。
列中數(shù)據(jù)有重復(fù)時菱父,不允許創(chuàng)建唯一索引牵囤。
創(chuàng)建方式:基本索引 index 前面加 unique.
1. create table <table_name>([...], unique index<index_name>)(column_name, ...)
...
- 主鍵索引:
主鍵會自動創(chuàng)建主鍵索引。
主鍵索引是一種特定的唯一索引滞伟。
只能創(chuàng)建一個揭鳞,但可以包含多列。
創(chuàng)建方式:
PRIMARY KEY (id),
- 候選索引:
也要求數(shù)據(jù)的唯一性梆奈。
在數(shù)據(jù)庫和自由表中可以為每個表創(chuàng)建多個候選索引野崇。- 聚集索引:
行的物理順序和鍵值的邏輯順序相同。
一個表只能有一個聚集索引亩钟。
劇集索引通常提供更快的訪問速度乓梨。
適用于很少對基表進行增刪改操作的情況。
創(chuàng)建主鍵時制定CLUSTERED關(guān)鍵字清酥,自動生成唯一聚集索引扶镀。
應(yīng)用場景:
聚集索引對于那些經(jīng)常要搜索范圍值的列特別有效- 非聚集索引:
行的物理順序和邏輯順序可以不相同。
表中每一列可以有自己的非聚集索引焰轻。
創(chuàng)建主鍵時制定NONCLUSTERED關(guān)鍵字臭觉,自動生成唯一非聚集索引。- 單獨索引:
在一個列上建立的索引- 復(fù)合索引:
在多個列上建立的索引叫做復(fù)合索引
正常情況下復(fù)合索引不能替代多個單一索引
如果一個表中的數(shù)據(jù)在查詢時有多個字段總是同時出現(xiàn)則這些字段就可以作為復(fù)合索引,形成索引覆蓋可以提高查詢的效率
復(fù)合索引的使用原則是第一個條件應(yīng)該是復(fù)合索引的第一列
比如字段a,b蝠筑,c建立復(fù)合索引相當(dāng)于a狞膘,ab,abc建立3個索引
4.索引失效的場景:
- 使用like關(guān)鍵字匹配字符串第一個為‘%’什乙。
- 查詢條件中包含or/in/not in/<>關(guān)鍵字挽封。
- 訪問表上的數(shù)據(jù)行超出總表記錄數(shù)30%的,變成全表掃描臣镣。
- 查詢條件中辅愿,在索引列上使用函數(shù)時或者對索引列進行運算。
- 多列索引中忆某,第一個索引使用范圍查詢点待,只能用到部分或者無法使用索引。
- 多列索引中褒繁,第一個查詢條件不是最左索引。