SQL索引
索引是數據庫的搜索引擎使用,以加快數據檢索特定的查找表。簡單地說,索引是一個指向表中的數據。數據庫中的索引非常類似於在一本書的索引。
例如,如果你想引用一本書的所有頁麵以討論某個話題,首先參考索引,其中列出了所有的主題字母順序,然後被轉介到一個或多個特定的頁碼。
索引有助於加快SELECT和WHERE子句查詢,但它會減慢數據輸入,使用UPDATE和INSERT語句。索引可創建或刪除,但對數據不會有影響。
創建索引包括CREATE INDEX語句,它允許重命名索引,指定表和其中一個或多個列索引,並指示索引是否為升序或降序排序。
索引是唯一的,類似於UNIQUE約束,索引防止在列的列或組合在其上有一個索引重複條目。
CREATE INDEX命令:
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子句作為過濾器中的兩個或多個列,組合索引將是最好的選擇。
隱式索引:
隱式索引是自動由數據庫服務器創建對象時創建的索引。索引是主鍵約束和唯一性約束自動創建。
DROP INDEX命令:
索引可以使用SQL DROP命令刪除。 應當謹慎刪除索引時導致的性能可能會減慢或改善。
其基本語法如下:
DROP INDEX index_name;
您可以查看INDEX約束篇章查看索引的實際例子。
什麼時候避免使用索引?
儘管索引的目的在於提高數據庫的性能,以下幾種情況應該避免使用。以下準則顯示,當使用索引應該重新考慮:
-
索引不應該用在小型表上。
-
有頻繁的,大批量更新或插入操作的表。
-
索引不應該用於對包含大量NULL值的列。
-
列經常操縱不應該被索引。