MSSQL分页查询性能瓶颈之谜(mssql 分页查询缓慢)
MSSQL分页查询性能瓶颈之谜因大数据处理量在增加,而出现分页查询性能问题而引起广泛关注。有些人认为MSSQL本身的性能限制,表现在物理读写上,当数据量特别大的时候很难支撑起良好的性能,但有更多的人认为,MSSQL在分页查询的性能方面本身是没有问题的,很多性能瓶颈都是由于开发人员在使用手段上导致。
解决分页查询性能瓶颈前我们需要先了解MSSQL中如何实现分页查询:
– 使用Limit offset方式
SELECT p.name, p.date_created
FROM products pORDER BY date_created
LIMIT 5 OFFSET 10
– 使用ROWNUM(需要MSSQL2012及以上版本)
SELECT p.name, p.date_created
FROM(SELECT ROW_NUMBER() OVER (ORDER BY date_created) as rownum, name, date_created
FROM products) pWHERE rownum BETWEEN line_start AND line_end
以上两中方式分页的基本原理都是按行号排序,尽量减少时间花费在物理读写上,只取出需要查询的数据行,然后按页显示。
但是如果开发人员在使用上没有充分考虑,性能依旧不佳,一般瓶颈可能是:
– 尽量减少排序花费:如果只需要进行某些特定条件下的排序,可以在where中对需要排序的列及时限制,减少排序范围及花费。
– 不要使用函数或表达式进行排序:处理时Db会将函数或表达式强转和索引无关的数据类型,并且不能使用索引库检索快速定位,而必须按行遍历。因此排序时尽量不要使用函数或表达式,如datetime很晚的数据应使用int类型的格式。
以上是解决MSSQL分页查询性能瓶颈的常用方法,只有更好的把握开发使用上的细节,才能最大程度的发挥MSSQL的查询性能。