我有一个表(可能会变大,数百万行),我会定期执行查询SELECT * from table WHERE somefield = 20
,我希望此查询能够快速运行。在任何时候,我都希望这个查询最多可以返回10行,这个特定值为20(不保证任何其他值)。索引这个的正确方法是什么?仅在某个字段上放置索引就足够了,并确保统计数据大致是最新的吗?或者我可以尝试优化其他任何技巧吗?
答案 0 :(得分:1)
此查询隔离的理想索引是带有键列somefield
的索引,并包含表中所有其他列的列(通过使索引成为聚簇或NCI)使用INCLUDE
选项)。
这将允许直接搜索值并避免需要书签查找。
但NCI的所有这些列的维护开销会影响数据修改操作,您可能更喜欢在不同的键列上定义的CI以使其他查询受益或无论如何都要避免碎片
因此,您可能更喜欢仅在somefield
上定义NCI并使用10个书签查找。这是一种平衡行为。
修改。实际上,如果您 对优化查询somefield = 20
感兴趣,那么您只需在该值上创建filtered index即可。我可能会include
该索引定义中的所有列。