我正在SQL Server中编写一个连接大约10个表的存储过程。当我从查询中排除此特定表的连接时,逻辑读取看起来合理。但是当我包含它时,某些表的逻辑读取上升到9000.这个表有主键聚集,我加入它就像查询中的其他表(anotherTable.FK = thisTable.PK)
逻辑读取SQL Server是否显示错误? 我可以寻找什么来改善这种行为?
由于
答案 0 :(得分:1)
群集主键只会带你到目前为止 - 它们只是根据聚集索引确定页面中行的半物理组织。所有数据都存储在树中而不是索引中,因此读取的效率几乎没有 - 您仍然可以有效地读取整行。
为了获得更高的性能,您确实需要覆盖非聚集索引(这些索引通常更窄,因此每页适合更多数据),并且您希望在查看执行计划时查看索引搜索或索引扫描。这些只读取索引中的信息(加上任何包含的列),并且每页适合更多,并且能够更快地运行(没有那么多不必要的数据被读取,丢弃或跳过)。
答案 1 :(得分:0)
通过不了解所有信息很难确定问题。 10个表是一个相当大的查询。
我会验证查询计划看起来是否正确。它是使用索引而不是表扫描?是按照您期望的顺序加入吗?
另外,使用临时表帮助我进行SQL调优。通过使用select into #tempTable将大型查询分成更小的部分。临时表对我来说有所不同。