索引的建立,刪除

2021-09-26 13:25:30 字數 3461 閱讀 3177

什麼是索引索引的優點

索引的最明顯的優點就是減少查詢的速度,提高資料庫的效率。

o 通過索引查詢可以縮短資料檢索的時間

o 通過索引可以加快表與表之間的關聯查詢時間

為排序或者分組的字段增加索引,可以提公升排序和分組的效率。

索引的缺點

建立索引的時間成本會隨著資料量的增大而增大。

索引建立之後,在對資料庫表中的資料進行增、刪、改等操作之後,相應的索引也需要進行維護,降低了資料維護的速度。

從本質上來講,索引是通過空間來換取時間。也就是說,在我們縮短查詢的時間成本的同時,勢必要犧牲磁碟空間成本來儲存索引。

索引的應用

表資料量較大且響應時間不能滿足需求的時候,可以考慮使用索引。

索引建議建立在變動頻率較小,且值內容較多的字段上。

索引分類

物理角度

集聚索引:決定資料在磁碟上的物理排序,乙個表只能有乙個聚集索引。

非集聚索引:不決定資料在磁碟的物理排序,索引上只包含建立索引的資料和乙個類似聚集索引物理排序指標一樣的定位符,通過這個定位符可以找到資料。

使用角度

普通索引、復合索引、唯一索引、主鍵索引、全文索引、空間索引

unique唯一索引

不可以出現相同的值,可以有null值。

index普通索引

允許出現相同的索引內容。

primary key主鍵索引

不允許出現相同的值,且不能為null值,乙個表只能有乙個primary_key索引。

fulltext index 全文索引

上述三種索引都是針對列的值發揮作用,但全文索引,可以針對值中的某個單詞,比如一篇文章中的某個詞,然而並沒有什麼卵用,因為只有myisam以及英文支援,並且效率讓人不敢恭維,但是可以用coreseek和xunsearch等第三方應用來完成這個需求。

普通索引

最基本的索引,它沒有任何限制。普通索引是使用最為頻繁的索引。

注意

目前索引的總數,索引總數太多會對資料新增造成效率影響

• 建立索引的字段的查詢頻次,以及表的總行數大小。

普通索引的建立能夠有效地提高熱頻次查詢語句的效率。避免慢 sql 的產生。

慢 sql 的治理,很大程度上需要借助索引來進行輔助。

alter table ordertest add index (ordercode(255)); 

create index ordercode on order(ordercode);

復合索引

在多個欄位上建立索引,可以加速復合條件查詢。復合索引也叫做聯合索引。 復合索引的建立,我們需要尋找多條件頻繁查詢的語句來進行設定。

注意

最左字首原則

復合索引由欄位 (a,b,c) ,那麼復合索引的查詢可以支援 a | a,b | a,b,c 3 種組合進行查詢,但不支援 b,c 進行查詢。

mysql中的索引可以以一定順序引用多列,這種索引叫作聯合索引。如user表的name和city加聯合索引就是index (name,city)。

最左字首原則:如果查詢的時候查詢條件精確匹配索引的左邊連續一列或幾列,則此列就可以被用到。如下

select * from user where name=xx and city=xx ; //可以命中索引

select * from user where name=xx ; // 可以命中索引

select col1, col2 from t1 where col1 = '213';// 可以命中索引

select * from user where city=xx; // 無法命中索引

alter table ordertest add index (id, ordercode(255), state); 

create index ordercode on order(id, ordercode, state);

唯一索引

一種唯一性索引。索引列值要唯一,但允許有空值。如果是組合索引,則組合後的列值必須唯一。

唯一索引起到了兩個作用:避免重複保證唯一性,提高檢索效率。

alter table ordertest add unique index (ordercode);

create unique ordercode on order(ordercode);

主鍵索引

一種特殊的唯一索引。用於唯一標識資料表中某條記錄,不允許有空值,一般用 primary key 來控制。

alter table ordertest add primary key(id);
全文索引強烈注意:mysql自帶的全文索引只能用於資料庫引擎為myisam的資料表,如果是其他資料引擎,則全文索引不會生效。此外,mysql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索。如果需要對包含中文在內的文字資料進行全文檢索,我們需要採用sphinx(斯芬克斯)/coreseek技術來處理中文。

alter table ordertest add fulltext index(ordercode(255));
空間索引

空間索引是對空間資料型別的字段建立的索引,mysql 中的空間資料型別有 4 種,分別是 geometry、point、linestring、polygon。空間索引只能在儲存引擎為 myisam 的表中建立,建立空間索引的列必須宣告不允許為空。

查詢索引

show index from table_name;

show index from order;

刪除索引

drop index index_name on table_name;

drop index order_code on order;

alter table table_name drop index index_name;

alter table order drop primary key;

alter table order drop index order_code;

借鑑於

mysql 建立索引,刪除索引,檢視索引

索引可以提高資料的檢索效率,也可以降低資料庫的io成本,並且索引還可以降低資料庫的排序成本。排序分組操作主要消耗的就是cpu資源和記憶體,所以能夠在排序分組操作中好好的利用索引將會極大地降低cpu資源的消耗。如何判定是否需要建立索引?1 較頻繁地作為查詢條件的字段 這個都知道。什麼是教頻繁呢?分析你...

mysql 建立索引和刪除索引

索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...

mysql 建立索引和刪除索引

索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 alter table table name ...