SQL索引建立原則 建立與刪除示例

2021-08-02 00:01:54 字數 2515 閱讀 8274

對乙個資料庫較大的表建立合適的索引,由此索引的唯一性,可以在很大程度上加快資料檢索速度、加快表與表之間的連線、減少查詢中分組與排序的事件,從而提高系統效能。但是索引並不是多多益善,因此建立和維護需要耗費時間,而索引也需要占用很大的物理空間,是以空間來換取速度的一種機制,另外更新表時索引也要相應修改。合理的索引能幫助你很大的提高查詢效率,但不當的索引也有可能會拖慢查詢,尤其是建立復合索引時更要謹慎。

表的主鍵、外來鍵必須有索引;

資料量超過300的表應該有索引;

經常與其他表進行連線的表,在連線欄位上應該建立索引;

經常出現在where子句中的字段,特別是大表的字段,應該建立索引;

索引應該建在選擇性高的字段上;

索引應該建在小字段上,對於大的文字字段甚至超長字段(例如資料型別為text或ntext的字段),不要建索引;

頻繁進行資料操作的表,不要建立太多的索引;

刪除無用的索引,避免對執行計畫造成負面影響;

復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替;

正確選擇復合索引中的主列字段,一般是選擇性較好的字段;

復合索引的幾個字段是否經常同時以and方式出現在where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引;

如果復合索引中包含的字段經常單獨出現在where子句中,則分解為多個單字段索引;

如果復合索引所包含的字段超過3個,那麼仔細考慮其必要性,考慮減少復合的字段;

如果既有單字段索引,又有這幾個欄位上的復合索引,一般可以刪除復合索引;

在執行create table語句時可以建立索引,也可以單獨用create index或alter table來為表增加索引。

1.alter table

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)

其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,預設時,將根據第乙個索引列賦乙個名稱。另外,alter table允許在單個語句中更改多個表,因此可以同時建立多個索引。

2.create index

create index可對表增加普通索引或unique索引。

create

index index_name on table_name (column_list)

create unique index index_name on table_name (column_list)

table_name、index_name和column_list具有與alter table語句中相同的含義,索引名不可選。另外,不能用create index語句建立primary key索引。

3.索引型別

在建立索引時,可以規定索引能否包含重複值。如果不包含,則索引應該建立為primary key或unique索引。對於單列惟一性索引,這保證單列不包含重複的值。對於多列惟一性索引,保證多個值的組合不重複。

primary key索引和unique索引非常類似。事實上,primary key索引僅是乙個具有名稱primary的unique索引。這表示乙個表只能包含乙個primary key,因為乙個表中不可能具有兩個同名的索引。

下面的sql語句對student表在sid上新增primary key索引。

alter

table studentadd primary

key (sid)

可利用alter table或drop index語句來刪除索引。類似於create index語句,drop index可以在alter table內部作為一條語句處理,語法如下。

drop index index_name on talbe_name

alter

table table_name drop index index_name

alter

table table_name drop

primary

key

其中,前兩條語句是等價的,刪除掉table_name中的索引index_name。

第3條語句只在刪除primary key索引時使用,因為乙個表只可能有乙個primary key索引,因此不需要指定索引名。如果沒有建立primary key索引,但表具有乙個或多個unique索引,則sql將刪除第乙個unique索引。

如果從表中刪除了某列,則索引會受到影響。對於多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。

SQL建立索引和刪除索引

使用create 語句建立索引 create index index name on table name column name,column name include score 普通索引 create unique index index name on table name column n...

索引建立原則

1 表的主鍵 外來鍵必須有索引 2 資料量超過300的表應該有索引 3 經常與其他表進行連線的表,在連線欄位上應該建立索引 4 經常出現在where子句中的字段,特別是大表的字段,應該建立索引 5 索引應該建在選擇性高的字段上 6 索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引 7 ...

mysql 建立索引 刪除索引 檢視索引sql語句

在執行create table語句時可以建立索引,也可以單獨用create index或alter table來為表增加索引。alter table用來建立普通索引 unique索引或primary key索引。alter table table name add index index name ...