MYSQL-----索引

索引 (索引是對錶上一列或者多列進行排序的結構,提高對錶中數據的查詢速度,不同存儲引擎所支持的索引數不同,至少支持16個索引,索引長度256字節,索引有兩種存儲類型,Btree和hash,一般默認爲btree)

索引的優點是對於那些有依賴關係的父表和子表在進行聯合查詢的時候,會提高查詢速度。缺點是創建和維護需要耗費時間。耗費時間的數量隨數據量的增加而增加。索引需要佔用一定的物理空間。在對數據進行增刪改查時還需要動態維護索引,數據維護速度降低。
由於索引會影響插入記錄速度。當我們插入大量記錄時,可以先刪除索引,插入完成之後,再創建索引。

1.索引的分類
1)普通索引。可以創建在任何數據類型中,查詢記錄時通過該索引進行查詢。

2)唯一索引。設置索引的字段是唯一的,主鍵就是一種特殊性的唯一索引。

3)全文索引。只能創建在類型爲char,vchar,text的字段上。不區分大小寫,但索引的列使用二進制排序之後,可以進行大小寫的區分。只有MYISAM支持全文檢索。

4)單列索引。在表的單個字段上創建索引,單列索引可以是普通,唯一,全文索引的任意一個。查詢數據量較大的字符串類型的字段時,可以提高速度。

5)多列索引。在表的多個字段上創建索引,但是只有在查詢了這些字段中第一個字段時,索引纔會被使用。

6)空間索引。空間索引只能建在空間數據類型上,可以提高系統獲取空間數據的效率。空間數據類型有:GEOMETRY,POINT,LINESTRING,POLYGON.目前只有MYISAM支持空間索引,且索引的字段不能爲空。

2.索引的設計原則

1)選擇唯一性索引。可以通過該索引快速地確定某一條記錄。

2)爲經常需要排序,分組,聯合操作的字段建立索引。如ORDER BY,GROUP BY,DISTINCT,UNION,可以有效避免排序操作。

3)爲常作爲查詢字段的字段建立索引。可以提高整個表的查詢速度。

4)限制索引的數目,當索引較多時,會佔用一定的磁盤空間,在更新表的時候,也會浪費時間。

5)儘量使用數據量少的索引。如果索引的值很長,查詢速度會受到影響。eg:char(100)的索引查詢速度比char(10)的查詢速度慢多了。

6)儘量使用前綴來索引。當索引的字段的值很長時,如TEXT,BLOG類型的字段,進行全文檢索會很浪費時間。只檢索字段前面的若干個字符可以提高檢索速度。

7)刪除不再使用或者很少使用的索引。當表被更新或者使用數據的方式發生變化之後,應該定期找出這些索引,進行刪除,減少索引對更新表操作的影響。

總而言之,因根據實際情況來判斷,選擇最合適的索引方式。

3.創建索引(通過show create table 表名 \G;來查看錶的索引)

3.1在創建表的時候創建索引。

**1)創建普通索引。**create table index1(id int,name char,sex boolean,index(id));在index1表上的id字段建立索引。

**2)創建唯一索引。**create table index2(id int unique,name char,unique index index_id2(id,asc));在表的id字段上建立名爲index_id2的唯一索引,且以升序排列。

3)創建全文索引。create table index3(id int,name char,fulltext index index_name(name))engine=MYISAM;在index3表上建立name字段的全文索引。這裏需要指明存儲引擎爲MYISAM.

4)創建單列索引。create table index4(id int,name char(20),index index4_name(name(10)));在表index4上建立name字段單列索引,並查詢前10個字符,提高查詢速度。

5)創建多列索引。create table index5(id int,name char,index index5_sy(id,name));//只有當index5表的第一個字段被查詢使用時,該索引纔會被觸發。

**6)創建空間索引。**create table index6(id int,space GEOMETRY not null,spatial index index6_space(space))engine=MYISAM;在space字段上建立名爲index6_space的索引。

3.2對已存在的表創建索引。

**1)創建普通索引。**create index index_sy1 on example0(id);//在example0表上的id字段上創建名爲indes_sy的索引

**2)創建唯一索引。**create unique index index_sy2 on example1(id);example1表上id字段可以有unique約束也可以沒有。

3)創建全文索引。create fulltext index index_sy3 on example2(name);表的存儲引擎必須是MYISAM,表的name字段必須是text,char,vchar字段。

4)創建單列索引。create index index_sy4 on example3(name(10));

5)創建多列索引。create index index_sy5 on example4(id,name);

**6)創建空間索引。**create spatial index index_sy6 on example5(space);space必須是空間類型非空,該表存儲引擎必須是MYISAM.

3.3用altertable來創建索引。

1)創建普通索引。alter table example0 add index index_name1(name);

**2)創建唯一索引。**alter table example1 add unique index index_name2(id);

**3)創建全文索引。**alter table example2 add fulltext index index_name3(name);

4)創建單列索引。alter table example3 add index index_name4(id);

5)創建多列索引。alter table example4 add index index_name5(id,name);

**6)創建空間索引。**alter table example5 add spatial index index_name6(space);

3.4刪除索引。

drop index 索引名 on 表名 ;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章