T-SQL 索引

2018-12-14 17:25 更新

索引是數(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的基本語法。

語法

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ù)合索引

復(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)建索引。

DROP INDEX命令

可以使用MS SQL SERVER DROP命令刪除索引。 丟棄索引時(shí)應(yīng)小心,因?yàn)樾阅芸赡軙?huì)減慢,也可能得到改善。

語法

下面是基本的語法。

DROP INDEX tablename.index_name

什么時(shí)候避免索引?

雖然索引旨在提高數(shù)據(jù)庫的性能,但有時(shí)應(yīng)避免使用它們。以下幾種情況應(yīng)重新考慮是否使用索引

  • 不應(yīng)在小表上使用索引。

  • 經(jīng)常進(jìn)行大批量更新或插入操作的表不應(yīng)設(shè)置索引。

  • 不應(yīng)在可能含大量NULL值的列上使用索引。

  • 頻繁操作的列不應(yīng)設(shè)置索引。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)