索引是數(shù)據(jù)庫(kù)的搜索引擎使用,以加快數(shù)據(jù)檢索特定的查找表。簡(jiǎn)單地說,索引是一個(gè)指向表中的數(shù)據(jù)。數(shù)據(jù)庫(kù)中的索引非常類似于在一本書的索引。
例如,如果你想引用一本書的所有頁(yè)面以討論某個(gè)話題,首先參考索引,其中列出了所有的主題字母順序,然后被轉(zhuǎn)介到一個(gè)或多個(gè)特定的頁(yè)碼。
索引有助于加快SELECT和WHERE子句查詢,但它會(huì)減慢數(shù)據(jù)輸入,使用UPDATE和INSERT語(yǔ)句。索引可創(chuàng)建或刪除,但對(duì)數(shù)據(jù)不會(huì)有影響。
創(chuàng)建索引包括CREATE INDEX語(yǔ)句,它允許重命名索引,指定表和其中一個(gè)或多個(gè)列索引,并指示索引是否為升序或降序排序。
索引是唯一的,類似于UNIQUE約束,索引防止在列的列或組合在其上有一個(gè)索引重復(fù)條目。
CREATE INDEX的基本語(yǔ)法如下:
CREATE INDEX index_name ON table_name;
單列索引是一個(gè)基于只有創(chuàng)建表列。 其基本語(yǔ)法如下:
CREATE INDEX index_name ON table_name (column_name);
唯一索引不僅用于性能,而且要求數(shù)據(jù)的完整性。唯一索引不允許有任何重復(fù)值插入到表中。 其基本語(yǔ)法如下:
CREATE UNIQUE INDEX index_name on table_name (column_name);
組合索引在表上的兩個(gè)或多個(gè)列的索引。其基本語(yǔ)法如下:
CREATE INDEX index_name on table_name (column1, column2);
是否要?jiǎng)?chuàng)建一個(gè)單列索引或復(fù)合索引,考慮到列,您可以使用非常頻繁的查詢的WHERE子句作為過濾條件。
應(yīng)該有只有一個(gè)使用列,單列指數(shù)應(yīng)的選擇。如果有頻繁使用WHERE子句作為過濾器中的兩個(gè)或多個(gè)列,組合索引將是最好的選擇。
隱式索引是自動(dòng)由數(shù)據(jù)庫(kù)服務(wù)器創(chuàng)建對(duì)象時(shí)創(chuàng)建的索引。索引是主鍵約束和唯一性約束自動(dòng)創(chuàng)建。
索引可以使用SQL DROP命令刪除。 應(yīng)當(dāng)謹(jǐn)慎刪除索引時(shí)導(dǎo)致的性能可能會(huì)減慢或改善。
其基本語(yǔ)法如下:
DROP INDEX index_name;
您可以查看INDEX約束篇章查看索引的實(shí)際例子。
盡管索引的目的在于提高數(shù)據(jù)庫(kù)的性能,以下幾種情況應(yīng)該避免使用。以下準(zhǔn)則顯示,當(dāng)使用索引應(yīng)該重新考慮:
索引不應(yīng)該用在小型表上。
有頻繁的,大批量更新或插入操作的表。
索引不應(yīng)該用于對(duì)包含大量NULL值的列。
列經(jīng)常操縱不應(yīng)該被索引。