SQL 索引

2022-08-22 13:50 更新

SQL 索引


 索引是一種特殊的查詢表,可以被數(shù)據(jù)庫搜索引擎用來加速數(shù)據(jù)的檢索。簡單說來,索引就是指向表中數(shù)據(jù)的指針。數(shù)據(jù)庫的索引同書籍后面的索引非常相像。

 例如,如果想要查閱一本書中與某個特定主題相關(guān)的所有頁面,你會先去查詢索引(索引按照字母表順序列出了所有主題),然后從索引中找到一頁或者多頁與該主題相關(guān)的頁面。

 索引能夠提高 SELECT 查詢和 WHERE 子句的速度,但是卻降低了包含 UPDATE 語句或 INSERT 語句的數(shù)據(jù)輸入過程的速度。索引的創(chuàng)建與刪除不會對表中的數(shù)據(jù)產(chǎn)生影響。

 創(chuàng)建索引需要使用 CREATE INDEX 語句,該語句允許對索引命名,指定要創(chuàng)建索引的表以及對哪些列進(jìn)行索引,還可以指定索引按照升序或者降序排列。

 同 UNIQUE 約束一樣,索引可以是唯一的。這種情況下,索引會阻止列中(或者列的組合,其中某些列有索引)出現(xiàn)重復(fù)的條目。


CREATE INDEX 命令:


 CREATE INDEX命令的基本語法如下:

CREATE INDEX index_name ON table_name;

單列索引:

 單列索引基于單一的字段創(chuàng)建,其基本語法如下所示:

CREATE INDEX index_name
ON table_name (column_name);

唯一索引:

 唯一索引不止用于提升查詢性能,還用于保證數(shù)據(jù)完整性。唯一索引不允許向表中插入任何重復(fù)值。其基本語法如下所示:

CREATE UNIQUE INDEX index_name
on table_name (column_name);

 如果您希望索引不止一個列,您可以在括號中列出這些列的名稱,用逗號隔開:

CREATE INDEX index_name
on table_name (column1, column2);

隱式索引:

 隱式索引由數(shù)據(jù)庫服務(wù)器在創(chuàng)建某些對象的時候自動生成。例如,對于主鍵約束和唯一約束,數(shù)據(jù)庫服務(wù)器就會自動創(chuàng)建索引。

DROP INDEX 命令:

 索引可以用 SQL DROP 命令刪除。刪除索引時應(yīng)當(dāng)特別小心,數(shù)據(jù)庫的性能可能會因此而降低或者提高。

 其基本語法如下:

DROP INDEX table_name.index_name;

什么時候應(yīng)當(dāng)避免使用索引?


 盡管創(chuàng)建索引的目的是提升數(shù)據(jù)庫的性能,但是還是有一些情況應(yīng)當(dāng)避免使用索引。下面幾條指導(dǎo)原則給出了何時應(yīng)當(dāng)重新考慮是否使用索引:

  • 小的數(shù)據(jù)表不應(yīng)當(dāng)使用索引;
  • 需要頻繁進(jìn)行大批量的更新或者插入操作的表;
  • 如果列中包含大數(shù)或者 NULL 值,不宜創(chuàng)建索引;
  • 頻繁操作的列不宜創(chuàng)建索引。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號