针对特定查找优化的索引

时间:2012-08-17 08:21:45

标签: sql-server-2008 query-optimization indexing

我有一个表(可能会变大,数百万行),我会定期执行查询SELECT * from table WHERE somefield = 20,我希望此查询能够快速运行。在任何时候,我都希望这个查询最多可以返回10行,这个特定值为20(不保证任何其他值)。索引这个的正确方法是什么?仅在某个字段上放置索引就足够了,并确保统计数据大致是最新的吗?或者我可以尝试优化其他任何技巧吗?

1 个答案:

答案 0 :(得分:1)

此查询隔离的理想索引是带有键列somefield的索引,并包含表中所有其他列的列(通过使索引成为聚簇或NCI)使用INCLUDE选项)。

这将允许直接搜索值并避免需要书签查找。

但NCI的所有这些列的维护开销会影响数据修改操作,您可能更喜欢在不同的键列上定义的CI以使其他查询受益或无论如何都要避免碎片

因此,您可能更喜欢仅在somefield上定义NCI并使用10个书签查找。这是一种平衡行为。

修改。实际上,如果您 对优化查询somefield = 20感兴趣,那么您只需在该值上创建filtered index即可。我可能会include该索引定义中的所有列。