`

SQLSERVER 高效分页查询

    博客分类:
  • SQL
 
阅读更多

     Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2

     最简单、普通的方法:

 

SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC

     平均查询100次所需时间:45s

 

     第二种方案

 

SELECT * FROM (SELECT TOP 30 * FROM (SELECT TOP 45030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDER BY f.YEAR ASC, f.ID DESC) s ORDER BY s.YEAR DESC,s.ID DESC

     平均查询100次所需时间:138S

 

     第三种方案

 

SELECT * FROM ARTICLE w1, (SELECT TOP 30 ID FROM (SELECT TOP 50030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC) w ORDER BY w.YEAR ASC, w.ID ASC) w2 WHERE w1.ID = w2.ID ORDER BY w1.YEAR DESC, w1.ID DESC

     平均查询100次所需时间:21S

 

     第四种方案

SELECT * FROM QKW_wenzhang w1 WHERE wenzhang_id in (SELECT top 30 wenzhang_id FROM (SELECT top 45030 wenzhang_id, nian FROM QKW_wenzhang ORDER BY nian DESC, wenzhang_id DESC) w ORDER BY w.nian ASC, w.wenzhang_id ASC) ORDER BY w1.nian DESC, w1.wenzhang_id DESC

     平均查询100次所需时间:20S

 

     第五种方案

 

SELECT w2.n, w1.* FROM ARTICLE w1, (SELECT TOP 50030 row_number() OVER (ORDER BY YEAR DESC, ID DESC) n, ID FROM ARTICLE ) w2 WHERE w1.ID = w2.ID AND w2.n > 50000 ORDER BY w2.n ASC

     平均查询100次所需时间:15S

 

 查询第1000-1030条记录

 

SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 1000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC

     平均查询100次所需时间:80s

 

     第二种方案

 

SELECT * FROM (SELECT TOP 30 * FROM (SELECT TOP 1030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDER BY f.YEAR ASC, f.ID DESC) s ORDER BY s.YEAR DESC,s.ID DESC

     平均查询100次所需时间:30S

 

     第三种方案

 

SELECT * FROM ARTICLE w1, (SELECT TOP 30 ID FROM (SELECT TOP 1030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC) w ORDER BY w.YEAR ASC, w.ID ASC) w2 WHERE w1.ID = w2.ID ORDER BY w1.YEAR DESC, w1.ID DESC

     平均查询100次所需时间:12S

 

     第四种方案

SELECT * FROM QKW_wenzhang w1 WHERE wenzhang_id in (SELECT top 30 wenzhang_id FROM (SELECT top 1030 wenzhang_id, nian FROM QKW_wenzhang ORDER BY nian DESC, wenzhang_id DESC) w ORDER BY w.nian ASC, w.wenzhang_id ASC) ORDER BY w1.nian DESC, w1.wenzhang_id DESC

     平均查询100次所需时间:13S

 

     第五种方案

 

SELECT w2.n, w1.* FROM ARTICLE w1, (SELECT TOP 1030 row_number() OVER (ORDER BY YEAR DESC, ID DESC) n, ID FROM ARTICLE ) w2 WHERE w1.ID = w2.ID AND w2.n > 1000 ORDER BY w2.n ASC

     平均查询100次所需时间:14S

 

     由此可见在查询页数靠前时,效率3>4>5>2>1,页码靠后时5>4>3>1>2,再根据用户习惯,一般用户的检索只看最前面几页,因此选择3 4 5方案均可,若综合考虑方案5是最好的选择,但是要注意SQL2000不支持row_number()函数,由于时间和条件的限制没有做更深入、范围更广的测试,有兴趣的可以仔细研究下。

 

 

分享到:
评论

相关推荐

    java语言的分页查询功能(mysql和sql server)

    理解分页原理和数据库分页语法,掌握JDBC基本用法,再根据实际需求选择是否使用框架进行优化,是实现高效分页查询的关键。无论是在MySQL还是SQL Server中,正确地实现分页都能显著提升应用性能和用户体验。

    SQLServer数据库分页查询

    ### SQL Server 数据库分页查询方法详解 #### 一、背景与问题定义 在实际的数据库操作中,分页查询是非常常见的需求之一。对于大型数据集来说,一次加载所有数据到前端显示是不现实的,这不仅会增加服务器负担,还...

    SQL server 分页查询

    本文将深入探讨SQL Server中的分页查询技术,帮助读者掌握如何高效地进行数据分页,以提升应用程序的性能和用户体验。 ### SQL Server分页查询概述 分页查询是指从大量数据中按需取出一部分数据的过程,通常用于...

    千万级数据分页查询存储过程SQLServer

    本文将深入探讨如何利用SQL Server的存储过程实现高效的大数据分页查询。 首先,理解分页查询的基本概念。分页查询是指从海量数据中按指定的页码和每页大小获取数据,通常用于网页展示或报表生成。在SQL Server中,...

    sqlserver+group by分组查询分页存储过程

    然而,在较旧的SQL Server版本中,可能需要更复杂的查询结构,如在给定的代码示例中所示,使用了动态SQL和变量来构建分页查询。 具体而言,`usp_PagingLarge`存储过程通过以下步骤实现分页: 1. **解析输入参数**...

    在SQL Server中通过SQL语句实现分页查询

    ### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...

    ASP.NET基于SQLServer的分页

    开发者需要理解分页原理,掌握如何在ASP.NET中使用分页控件,以及如何优化SQL Server的分页查询,以提供流畅的用户体验。在实际项目中,根据具体需求灵活运用这些技术,可以大大提升应用的性能和用户满意度。

    SQL ASP.NET高性能分页

    SQL Server 提供了一个非常实用的功能——`SET ROWCOUNT`,可以通过限制结果集中的行数来帮助开发者实现高效的分页查询。 #### 二、关键技术点解析 本文主要介绍一种基于`SET ROWCOUNT`的高效分页方法,并通过具体...

    SSH框架+SQLServer实现分页的小项目

    通过研究这个项目,开发者可以学习到SSH框架的整合、Spring的bean管理和事务处理、Hibernate的数据库操作,以及SQLServer的分页查询技巧。同时,对于提高Web应用的用户体验,理解分页原理和实现方式也是必不可少的。

    SQLServer分页.rar

    本资源"SQLServer分页.rar"包含了一个名为"SQL分页.txt"的文件,里面详细讲解了SQL Server中的分页实现方法。 首先,我们来理解SQL Server分页的基本概念。分页通常涉及到两个关键参数:`OFFSET`和`FETCH NEXT`。`...

    SqlServer数据库分页

    在开发工具中,如SSMS(SQL Server Management Studio),我们可以利用其内置的功能来方便地构建和测试分页查询,通过图形界面设置分页参数,简化开发流程。 总之,SQL Server提供了多种分页方法,开发者可以根据...

    ASP+SQL Server带条件查询的分页存储过程及其ASP调用实例

    "ASP+SQL Server带条件查询的分页存储过程及其ASP调用实例" 本文主要介绍了如何使用ASP和SQL Server实现带条件查询的分页存储过程,并提供了实例代码和调用示例。该实例已经在IIS+ASP+SQL Server环境中进行了调试,...

    SQL Server 2000 通用分页过程

    ### SQL Server 2000 通用分页...此外,随着数据库技术的发展,现代版本的 SQL Server 已经提供了更为简便的分页查询方法,如使用 `OFFSET` 和 `FETCH NEXT` 语句等,这些方法可以进一步简化分页逻辑,提高查询性能。

    SqlServer高效万能分页存储过程

    使用系统游标分页,数据越大越能显示高效

    sql server分页技术(SQL Server 与Access数据库相关分页技术)

    在SQL Server中,分页技术是一项关键功能,尤其在处理大量数据时,它能有效...同时,优化查询计划和合理设计索引也能显著提升分页查询的速度。在数据库设计时,应考虑分页需求,以便在不影响功能的前提下实现最佳性能。

    高效的SQLSERVER分页查询(推荐)

    第一种方案、最简单、普通的方法: ... 平均查询100次所需时间:45s 第二种方案: 代码如下:SELECT * FROM ( SELECT TOP 30 * FROM (SELECT TOP 45030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDE

    真正高效的SQLSERVER分页查询(多种方案)

    综合这些测试结果,我们可以得出结论:在SQL Server中,使用窗口函数(如`row_number()`)的分页查询方法是最高效的。这种技术允许我们在不遍历整个数据集的情况下定位到特定的分页,显著降低了查询时间。同时,避免...

    sql server 分页大全

    总结,SQL Server 2000虽然没有内置的分页机制,但通过存储过程和TSQL语句的组合,依然可以实现高效的分页查询。理解并熟练运用这些技术,能帮助我们更好地管理和展示大量的数据库数据。在实际应用中,应根据具体...

    高效分页存储过程 高效分页存储过程

    在SQL Server数据库中,分页查询是常见的操作,特别是在数据量庞大的情况下,为了提高用户体验,我们需要快速地加载和展示一部分数据,而不是一次性加载所有数据。高效分页存储过程的实现对于优化数据库性能至关重要...

    最简单的SQL Server数据库存储过程分页

    本文介绍一种简单且高效的SQL Server存储过程实现分页的方法,这种方法仅需提供SQL语句、每页的记录数以及当前页数即可快速完成分页操作。 #### SQL Server存储过程分页原理 在SQL Server中,通过存储过程实现分页...

Global site tag (gtag.js) - Google Analytics