[英]SQL Server index included columns
我需要幫助了解如何創建索引。 我有一張看起來像這樣的桌子
我的查詢如下所示:
SELECT *
FROM table1
WHERE name = 'sam'
如果查詢有 order by 語句怎么辦?
SELECT * FROM table1 WHERE name = 'sam' ORDER BY id DESC
如果我的 where 語句中有 2 個參數怎么辦?
SELECT * FROM table1 WHERE name = 'sam' AND age > 12
創建包含列的索引的正確方法? 通過 Management Studio/Toad/etc 或 SQL(文檔):
CREATE INDEX idx_table_1 ON db.table_1 (name) INCLUDE (id)
ORDER BY
怎么辦如果優化器認為適合(由表統計信息和查詢確定),則ORDER BY
可以使用索引。 您可以通過查看查詢成本來測試復合索引或具有INCLUDE
列的索引是否效果最佳。
如果id
是聚集鍵(但並不總是主鍵),我可能不會包含該列...
與上面相同 - 您需要測試最適合您的查詢的方法。 可能是復合的、包含的或單獨的索引。
但請記住:
我強烈建議閱讀 Kimberly Tripp 的“ The Tipping Point ”,以更好地了解指數決策和影響。
由於我不知道您的數據庫將執行哪些確切任務以及其中有多少記錄,我建議您查看Index Basics MSDN 文章。 它將允許您自己決定要創建哪些索引。
如果ID
是您的主索引和/或聚集索引鍵,只需在Name, Age
上創建一個索引。 這將涵蓋所有三個查詢。
包含字段最適合用於檢索不在篩選器列表中的列的行級值,或檢索排序字段位於GROUP BY
子句中的聚合值。
如果插入很少見,請根據需要創建盡可能多的索引。
對於第一個查詢,為名稱列創建索引。
我認為 ID 列已經是主鍵...
使用名稱和年齡創建第二個索引。 您只能保留一個索引:'name, ag'e,第一次查詢不會慢很多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.