博客
关于我
记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
阅读量:797 次
发布时间:2023-03-28

本文共 902 字,大约阅读时间需要 3 分钟。

在优化SQL Server的分页查询时,特别是当使用ROW_NUMBER()分页时,确实面临着性能瓶颈,尤其是在处理大量数据和多个关联表时。以下是一些关键的优化策略和总结:

优化策略总结

  • 使用ROW_NUMBER()分页

    • ROW_NUMBER()分页是SQL Server中最优的分页方法,兼容2005及以上版本,效率高且优雅。
  • 控制查询引擎优化

    • 使用b.AddrId+'' in ('...')来欺骗查询引擎,确保利用时间索引而非表扫描。
  • 优化关联表访问

    • 将不参与where条件的表放到CTE外面,减少不必要的join操作,减少IO。
    • 合并涉及where条件的表到临时表中,减少主表的IO,提高效率。
  • join类型选择

    • 使用inner join而非left join,以便查询引擎优先处理主表的查询,提高索引利用率。
  • 使用forceseek提示

    • 在需要强制使用索引的情况下,使用WITH (FORCESEEK)提示,确保查询引擎选择索引而非表扫描。
  • 减少IO操作

    • 合理设计索引,确保在查询中能够有效利用到索引,减少表扫描次数。
    • 分配查询资源,避免在处理大量数据时,过多的IO操作成为性能瓶颈。
  • 实施步骤

    • 优化where条件:使用b.AddrId+'' in ('...'),确保查询引擎利用时间索引。
    • 使用临时表:将涉及where条件的表合并到临时表中,减少主表的IO。
    • 优化join类型:使用inner join而非left join,以便更有效地利用索引。
    • forceseek提示:在需要强制索引的情况下,使用WITH (FORCESEEK)提示。
    • CTE优化:将不参与where条件的表放到CTE外面,减少不必要的join操作。

    注意事项

    • 持续监控:定期监控查询执行计划和IO情况,及时发现并解决潜在问题。
    • 避免过度join:确保join操作是必要的,避免不必要的复杂查询。
    • 索引设计:合理设计索引,确保在查询中能够高效利用到,减少表扫描次数。

    通过以上策略,可以有效优化ROW_NUMBER()分页查询的性能,特别是在处理多个关联表和后续页数查询时,显著减少IO操作,提高查询效率。

    转载地址:http://pahfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现interpolation search插值搜索算法(附完整源码)
    查看>>
    Objective-C实现Interpolation search插值查找算法(附完整源码)
    查看>>
    Objective-C实现intersection交集算法(附完整源码)
    查看>>
    Objective-C实现intro sort内省排序算法(附完整源码)
    查看>>
    Objective-C实现inversions倒置算法(附完整源码)
    查看>>
    Objective-C实现isalpha函数功能(附完整源码)
    查看>>
    Objective-C实现islower函数功能(附完整源码)
    查看>>
    Objective-C实现isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现isupper函数功能(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现iterating through submasks遍历子掩码算法(附完整源码)
    查看>>
    Objective-C实现jaccard similarity相似度无平方因子数算法(附完整源码)
    查看>>
    Objective-C实现Julia集算法(附完整源码)
    查看>>
    Objective-C实现k nearest neighbours k最近邻分类算法(附完整源码)
    查看>>
    Objective-C实现k-Means算法(附完整源码)
    查看>>
    Objective-C实现k-nearest算法(附完整源码)
    查看>>
    Objective-C实现Knapsack problem背包问题算法(附完整源码)
    查看>>
    Objective-C实现knapsack背包问题算法(附完整源码)
    查看>>
    Objective-C实现knapsack背包问题算法(附完整源码)
    查看>>