索引是一種特殊的查詢表,可以被數據庫搜索引擎用來加速數據的檢索。簡單說來,索引就是指向表中數據的指針。數據庫的索引同書籍后面的索引非常相像。
例如,如果想要查閱一本書中與某個特定主題相關的所有頁面,你會先去查詢索引(索引按照字母表順序列出了所有主題),然后從索引中找到一頁或者多頁與該主題相關的頁面。
索引能夠提高 SELECT 查詢和 WHERE 子句的速度,但是卻降低了包含 UPDATE 語句或 INSERT 語句的數據輸入過程的速度。索引的創建與刪除不會對表中的數據產生影響。
創建索引需要使用 CREATE INDEX 語句,該語句允許對索引命名,指定要創建索引的表以及對哪些列進行索引,還可以指定索引按照升序或者降序排列。
同 UNIQUE 約束一樣,索引可以是唯一的。這種情況下,索引會阻止列中(或者列的組合,其中某些列有索引)出現重復的條目。
CREATE INDEX命令的基本語法如下:
CREATE INDEX index_name ON table_name;
單列索引基于單一的字段創建,其基本語法如下所示:
CREATE INDEX index_name
ON table_name (column_name);
唯一索引不止用于提升查詢性能,還用于保證數據完整性。唯一索引不允許向表中插入任何重復值。其基本語法如下所示:
CREATE UNIQUE INDEX index_name
on table_name (column_name);
聚簇索引在表中兩個或更多的列的基礎上建立。其基本語法如下所示:
CREATE INDEX index_name
on table_name (column1, column2);
創建單列索引還是聚簇索引,要看每次查詢中,哪些列在作為過濾條件的 WHERE 子句中最常出現。
如果只需要一列,那么就應當創建單列索引。如果作為過濾條件的 WHERE 子句用到了兩個或者更多的列,那么聚簇索引就是最好的選擇。
隱式索引由數據庫服務器在創建某些對象的時候自動生成。例如,對于主鍵約束和唯一約束,數據庫服務器就會自動創建索引。
索引可以用 SQL DROP 命令刪除。刪除索引時應當特別小心,數據庫的性能可能會因此而降低或者提高。
其基本語法如下:
DROP INDEX index_name;
盡管創建索引的目的是提升數據庫的性能,但是還是有一些情況應當避免使用索引。下面幾條指導原則給出了何時應當重新考慮是否使用索引: