加入一个特定的表会导致高逻辑读取
Posted
技术标签:
【中文标题】加入一个特定的表会导致高逻辑读取【英文标题】:Joining one particular table causes high logical reads 【发布时间】:2010-07-14 00:03:29 【问题描述】:我正在 SQL Server 中编写一个连接大约 10 个表的存储过程。当我从查询中排除这个特定表的连接时,逻辑读取看起来是合理的。但是,当我将其包含在内时,某些表的逻辑读取次数上升到 9000。该表具有聚集的主键,并且我像查询中的其他表一样加入它(anotherTable.FK = thisTable.PK)
SQL Server 显示的逻辑读取是否不正确? 我可以采取哪些措施来改善这种行为?
谢谢
【问题讨论】:
你能在你的问题中发布 XML 执行计划吗? 【参考方案1】:聚簇主键只能带您到此为止 - 它们只是根据聚簇索引确定页面中行的半物理组织。所有数据都存储在树中而不是索引中,因此读取效率几乎没有 - 您仍然有效地读取整行。
为了获得更高的性能,您确实希望覆盖非聚集索引(这些索引通常更窄,因此每页可以容纳更多数据),并且您希望在查看执行计划时看到索引搜索或索引扫描。这些仅读取索引中的信息(加上任何包含的列),并且每页可以容纳更多信息并且能够更快地运行(不会读取和丢弃或跳过太多不必要的数据)。
【讨论】:
【参考方案2】:由于不了解所有信息,很难确定问题所在。 10 个表是一个相当大的查询。
我会验证查询计划看起来是否正确。它是使用索引而不是表扫描吗?是否按照您期望的顺序加入?
此外,使用临时表帮助我进行了 SQL 调优。使用 select into #tempTable 将大型查询分成更小的部分。临时表之前对我产生了影响。
【讨论】:
以上是关于加入一个特定的表会导致高逻辑读取的主要内容,如果未能解决你的问题,请参考以下文章
创建带有外键的表会出现错误 ORA-00904: : oracle 10g 中的无效标识符 [重复]