我有一个性能问题。
我们有一个包含几百万条记录的表,我们正在提供一个网页,该网页每秒点击该表 100 次(选择)。查询由非聚集索引覆盖(也包含在 SP 中)
我的问题是对于我们想要提高性能的特定场景,我们是否明智地创建一个视图,该视图将始终为该场景产生 300 行并索引视图并查询视图,或者如果我没有任何区别使用覆盖查询查询现有的 2M plus 表?
我有一个性能问题。
我们有一个包含几百万条记录的表,我们正在提供一个网页,该网页每秒点击该表 100 次(选择)。查询由非聚集索引覆盖(也包含在 SP 中)
我的问题是对于我们想要提高性能的特定场景,我们是否明智地创建一个视图,该视图将始终为该场景产生 300 行并索引视图并查询视图,或者如果我没有任何区别使用覆盖查询查询现有的 2M plus 表?
您可以创建一个与您的查询尽可能匹配的视图并将其编入索引。据我了解,您只想应用 where 子句。这将起作用,它将把 where 的运行时成本降低到零。它还将删除所有不符合条件的行的 IO。这是一个好主意。
但是,您可以只使用过滤(覆盖)索引,这要简单得多。
从覆盖索引中获取范围是尽可能快的。它非常快。没有改进的可能。
真正的问题似乎是您正在查询数据库 100 次!您不能将这些查询折叠成一个或很少几个更大的查询吗?您可以使用表值参数一次提交多个查询输入,可以这么说。
嗨,根据我的理解,对于一个总是产生 300 行的特定场景,您正在创建一个视图。因此,如果这是一种情况,它是处理此问题的最佳方法。此外,在视图上的选择性列上创建覆盖索引将肯定会提高性能。