天天看點

如何建立索引

通過前面二篇文章我們基本學會了如何結合執行計劃分析出某Sql語句的性能問題,既然有性能問題的地方已經找到了,接下來就是如何優化查詢來提高查詢性能,而優化查詢最重要的武器就是建立索引,這篇文章就來總結如何建立索引來提高查詢速度,主要從以下幾個方面來總結。

了解索引

建立索引的文法

結合執行個體示範如何建立索引

   1,索引是什麼?

    在Sql Server中,索引是一種增強式的存在,這表示即使沒有索引,Sql Server的功能并不會受到影響。索引是對資料庫表中一列或多列的值進行排序的一種結構(B樹),使用索引可快速通路資料庫表中的特定資訊。

  2,為什麼要使用索引?

    就是提高查詢性能。

  3,有哪些索引?

    主要分為聚集索引(CLUSTERED INDEX)和非聚集索引(NONCLUSTERED INDEX)兩種,聚集索引指的是一列或多列的實體順序和邏輯順序是一緻的,一個資料庫表隻能有一個聚集索引,我們通常将主鍵(一般為自增int型)設為聚集索引。而非聚集索引則可以有多個,而且非聚集索引并不會改變資料庫表的實體結構。

  1,建立索引,sql文法如下。  

  2,删除索引,sql文法如下。

  表結構如下:

如何建立索引

  現在的需求是,查詢2006年7月1日到2007年7月31日的所有訂單,并按requireddate字段排序,查詢sql代碼如下:

  注意,這個表隻有主鍵orderid的聚集索引外,沒有建立任何索引。執行查詢檢視執行計劃,如下圖。

如何建立索引

  從上面的執行計劃可以看出,在排序和聚集索引查找方面比較耗時。首先看排序,因為是by requireddate排序的,是以對requireddate字段要建立單個字段索引,代碼如下。

  然後因為where條件中是按orderdate字段來限定範圍的,是以對orderdate字段要建立單個字段索引,代碼如下。

  因為要查詢的字段為orderid,orderdate,requireddate,shippeddate,shipname,shipaddress,是以我們可以針對這幾個字段建立一個組合字段索引,代碼如下。

  最後,我們再重新運作一次查詢,檢視執行計劃,如下圖。

如何建立索引

  從執行計劃中可以看到,後面那個已經變成了非聚集索引查詢了,說明我們建立的索引起作用了。具體是建立單個字段索引,組合字段索引還是兩個都要建立,這個要在實際的項目中反複試驗。