1
、作用分析
在索引列上,除了上面提到的有序查詢之外,資料庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。特別是當資料量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍。
例如,有3個未索引的表t1、t2、t3,分別只包含列c1、c2、c3,每個表分別含有1000行資料組成,指為1~1000的數值,查詢對應值相等行的查詢如下所示。
select c1,c2,c3from t1,t2,t3 where c1=c2 and c1=c3
此查詢結果應該為1000行,每行包含3個相等的值。在無索引的情況下處理此查詢,必須尋找3個表所有的組合,以便得出與where子句相配的那些行。而可能的組合數目為1000×1000×1000(十億),顯然查詢將會非常慢。
如果對每個表進行索引,就能極大地加速查詢程序。利用索引的查詢處理如下。
(1)從表t1中選擇第一行,檢視此行所包含的資料。
(2)使用表t2上的索引,直接定位t2中與t1的值匹配的行。類似,利用表t3上的索引,直接定位t3中與來自t1的值匹配的行。
(3)掃瞄表t1的下一行並重複前面的過程,直到遍歷t1中所有的行。
在此情形下,仍然對錶t1執行了乙個完全掃瞄,但能夠在表t2和t3上進行索引查詢直接取出這些表中的行,比未用索引時要快一百萬倍。
利用索引,mysql加速了where子句滿足條件行的搜尋,而在多表連線查詢時,在執行連線時加快了與其他表中的行匹配的速度。
2、建立索引
create:
create index可對表增加普通索引或unique索引;不能用create index語句建立primary key索引。
create index index_name on table_name (column_list)
create unique index index_name on table_name (column_list)
alter:
alter table用來建立普通索引、unique索引或primary key索引。
alter table table_name add index index_name (column_list)
alter table table_name add unique (column_list)
alter table table_name add primary key (column_list)
column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,預設時,mysql將根據第乙個索引列賦乙個名稱。另外,alter table允許在單個語句中更改多個表,因此可以在同時建立多個索引。
3、索引型別
在建立索引時,可以規定索引能否包含重複值。如果不包含,則索引應該建立為primary key或unique索引。對於單列惟一性索引,這保證單列不包含重複的值。對於多列惟一性索引,保證多個值的組合不重複。
primary key索引和unique索引非常類似。事實上,primary key索引僅是乙個具有名稱primary的unique索引。這表示乙個表只能包含乙個primary key,因為乙個表中不可能具有兩個同名的索引。
新增主鍵索引:
alter table students add primary key (sid)
4、刪除索引
drop index index_name on talbe_name
alter table table_name drop index index_name
alter table table_name drop primary key
第3條語句只在刪除primary key索引時使用,因為乙個表只可能有乙個primary key索引,因此不需要指定索引名。如果沒有建立primary key索引,但表具有乙個或多個unique索引,則mysql將刪除第乙個unique索引。
如果從表中刪除了某列,則索引會受到影響。對於多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。
5、檢視索引
show index from tblname;
show keys from tblname;
注意:1、復合索引
mysql每次查詢只能使用乙個索引,如果對where中條件的列增加普通索引是無效的,推薦建立復合索引(a,b,c),相當於建立了(a,b,c)(a,b)(a)三個索引,在建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。
2、索引不會包含有null值的列
只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。
3、排序的索引問題
mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。
4、like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
5、不使用not in和操作
not in和操作都不會使用索引將進行全表掃瞄。not in可以not exists代替,id3則可使用id>3 or id
mysql 制定索引 mysql索引操作
mysql索引操作 索引初識 什麼是索引 索引相當於mysql的一種鍵,是儲存引擎能快速找到資料的一種資料結構,具有非常好的效能,尤其當表中資料很多時,索引就顯得尤為重要,索引優化是資料查詢效能優化的最有效的手段,它能將資料查詢速度提公升幾個數量級 既然索引如此優秀,是不是索引越多越好?答案當然是否...
MySQL 索引操作
前面說過。從型別上,索引可以分為單列索引 普通索引,唯一索引,主鍵索引 組合索引 全文索引 空間索引。從操作上,索引可以分為建立索引 建立表時建立索引,基於現有表建立索引 查詢索引 刪除索引。下面將以普通索引為例,對索引操作進行詳細學習。1.建立表時建立索引 格式 create table 表名 欄...
mysql除錯索引 MySQL索引的操作
索引的概念 資料庫物件索引其實與書的目錄類似,主要是為了提高從表中檢索資料的速度。2 根據索引的儲存型別可以將索引分為b型索引 btree 和雜湊索引 hash 3 mysql所支援的索引 普通索引 唯一索引 全文索引 單列索引 多列索引和空間索引。一 建立和檢視普通索引 1 建立表時建立普通索引 ...