MSSQL, 查詢的欄位不存在索引和索引的[包含的資料行], 兩者把欄位加入的差別

MSSQL, 查詢的欄位不存在索引和索引的[包含的資料行], 兩者把欄位加入的差別

對於非聚集索引而言,如果查詢的結果欄位不在索引中,可以考慮兩種方式來提升查詢效率:將欄位加入索引和將欄位加入索引的「包含的資料行」。這兩種方法有不同的影響:

  1. 將欄位加入索引

    • 當你將欄位加入索引時,這些欄位會成為索引的一部分,這意味著 SQL Server 在查詢時可以使用這些欄位來進行索引掃描和查詢結果的篩選。
    • 這種方式適用於需要在查詢條件中使用這些欄位進行篩選和排序的情況,例如 WHERE 條件中使用了這些欄位。
    • 添加欄位到索引中可能會增加索引的大小和維護成本,因此需要權衡索引效能和成本之間的關係。
  2. 將欄位加入索引的「包含的資料行」

    • 在建立索引時,可以使用「包含的資料行」來將非索引鍵的欄位包含在索引中,但不是索引的排序鍵。這些欄位只是附加到索引頁面中,不會用於索引的排序或搜索。
    • 使用「包含的資料行」適用於那些不需要用於索引搜索但在查詢中仍然需要的欄位,例如 SELECT 列表中的欄位。
    • 這種方式不會對索引的搜索和排序行為產生直接影響,但可以提高查詢效率,特別是當這些欄位被頻繁地使用於查詢結果的檢索時。

總之,將欄位加入索引和加入索引的「包含的資料行」都可以提高查詢效率,但它們的適用場景和影響不同。通常來說,如果欄位需要用於索引的搜索和排序,則將其加入索引;如果欄位只是需要在查詢結果中使用,則將其作為「包含的資料行」加入索引可能更合適。

 

留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記