[英]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.