索引是數(shù)據(jù)庫搜索引擎用來加速數(shù)據(jù)檢索的特殊查找表。 簡單地說,一個(gè)索引是一個(gè)指向表中數(shù)據(jù)的指針。 數(shù)據(jù)庫中的索引與書本目錄的索引方式非常相似。
例如,如果您要引用一本書中討論某個(gè)主題的所有頁面,則可以參考索引,該索引按字母順序列出所有主題,然后指定了這些主題的頁碼。
索引加快了SELECT查詢和WHERE子句,但它降低了UPDATE和INSERT語句的數(shù)據(jù)輸入速度。創(chuàng)建或刪除索引不會(huì)對(duì)數(shù)據(jù)有影響。
創(chuàng)建索引涉及CREATE INDEX語句,它允許你對(duì)索引進(jìn)行命名,指定表和要索引的列,并指示索引是按升序還是按降序排列。
索引也可以是唯一的,類似于UNIQUE約束,索引防止在具有索引的列的組合中出現(xiàn)重復(fù)條目。
以下是CREATE INDEX的基本語法。
CREATE INDEX index_name ON table_name
單列索引是基于僅一個(gè)表的單列創(chuàng)建的索引。以下是基本語法。
CREATE INDEX index_name ON table_name (column_name)
CREATE INDEX singlecolumnindex ON customers (ID)
唯一索引不僅用于查找性能的提升,還可用于約束數(shù)據(jù)的完整性。唯一索引不允許將任何重復(fù)值插入到表中。以下是基本語法。
CREATE UNIQUE INDEX index_name on table_name (column_name)
CREATE UNIQUE INDEX uniqueindex on customers (NAME)
復(fù)合索引是對(duì)表的兩個(gè)或多個(gè)列設(shè)置索引。以下是基本語法。
CREATE INDEX index_name on table_name (column1, column2)
CREATE INDEX compositeindex on customers (NAME, ID)
無論是創(chuàng)建單列索引還是復(fù)合索引,請(qǐng)考慮您可能在查詢的WHERE子句中頻繁使用的列作為過濾條件。
如果只使用一列,則應(yīng)該選擇單列索引。 如果在WHERE子句中經(jīng)常使用兩個(gè)或多個(gè)列作為過濾器,則復(fù)合索引將是最佳選擇。
隱式索引是在創(chuàng)建對(duì)象時(shí)由數(shù)據(jù)庫服務(wù)器自動(dòng)創(chuàng)建的索引。 一般情況下數(shù)據(jù)庫會(huì)將自動(dòng)為主鍵約束和唯一約束創(chuàng)建索引。
可以使用MS SQL SERVER DROP命令刪除索引。 丟棄索引時(shí)應(yīng)小心,因?yàn)樾阅芸赡軙?huì)減慢,也可能得到改善。
下面是基本的語法。
DROP INDEX tablename.index_name
雖然索引旨在提高數(shù)據(jù)庫的性能,但有時(shí)應(yīng)避免使用它們。以下幾種情況應(yīng)重新考慮是否使用索引
不應(yīng)在小表上使用索引。
經(jīng)常進(jìn)行大批量更新或插入操作的表不應(yīng)設(shè)置索引。
不應(yīng)在可能含大量NULL值的列上使用索引。
頻繁操作的列不應(yīng)設(shè)置索引。
更多建議: