`
wotf23771
  • 浏览: 35226 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
社区版块
存档分类
最新评论

数据库分页查询

阅读更多
在这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。
可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。
下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。
一、 MySQL 数据库分页查询
MySQL数据库实现分页比较简单,提供了LIMIT函数。一般只需要直接写到sql语句后面就行了。
LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数。例如:
select * from table WHERE … LIMIT 10; #返回前10行
select * from table WHERE … LIMIT 0,10; #返回前10行
select * from table WHERE … LIMIT 10,20; #返回第10-20行数据
二、 SQLServer数据库分页查询
SQLServer数据库又分为SQLServer2000和SQLServer2005。一般比较简单的方法是通过TOP函数来实现。如下:
SELECT TOP 10 * FROM sql WHERE (
code NOT IN (SELECT TOP 20 code FROM TestTable ORDER BY id))
ORDER BY ID
这条语句,从理论上讲,整条语句的执行时间应该比子句的执行时间长,但事实相反。因为,子句执行后返回的是20条记录,而整条语句仅返回10条语句,所以影响数据库响应时间最大的因素是物理I/O操作。而限制物理I/O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。
以上语句的有一个致命的缺点,就是它含有NOT IN字样,要换成用not exists来代替not in,二者的执行效率实际上是没有区别的。
在以上分页算法中,影响我们查询速度的关键因素有两点:TOP和NOT IN。TOP可以提高我们的查询速度,而NOT IN会减慢我们的查询速度,所以要提高我们整个分页算法的速度,就要彻底改造NOT IN,同其他方法来替代它。
我们知道,几乎任何字段,我们都可以通过max(字段)或min(字段)来提取某个字段中的最大或最小值,所以如果这个字段不重复,那么就可以利用这些不重复的字段的max或min作为分水岭,使其成为分页算法中分开每页的参照物。在这里,我们可以用操作符“>”或“<”号来完成这个使命。如:
Select top 10 * from table1 where id>200
  于是就有了如下分页方案:
select top 页大小 *
from table1
where id>
(select max (id) from
(select top ((页码-1)*页大小) id from table1 order by id) as T
)
order by id
这种方法执行多少始终没有大的降势,后劲仍然很足。尤其对于数据量大的时候,该方法执行速度一点也不会降低。
使用TOP要求主键必须唯一,不能是联合主键。如果是联合主键,则查询出的结果会乱序的。
目前SQLServer2005提供了一个row_number()函数。ROW_NUMBER() 就是生成一个顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ReportID),其中ReportID可以是联合主键。下面,我们看看怎么具体应用这个RowNo进行分页.
SELECT TOP 10 * FROM
(
SELECT top 10 ROW_NUMBER() OVER (ORDER BY ReportID) AS RowNo
FROM TABLE
) AS A
WHERE RowNo > " + pageIndex*10
pageIndex就是我们需要数据的页数.
但对于SQLServer2000的话,如果是联合主键,我还没有解决办法,如果大家有可跟我联系。谢谢大家了。
三、 ORCALE数据库分页查询
ORCALE数据库实现分页查询可以使用row_number()函数或者使用rownum 虚列两种方法。
第一种:利用分析函数row_number() 方法
select * from(
select t.*,row_number() over (order by t1.id) rowno from TABLE1
)
where rowno between 21 and 40;
第二种:直接使用rownum 虚列
select * from
(select t.*,rownum as rowno from TABLE1 )
where rowno between 10 and 20
这两种方法比较,显然第二种方法比较好。因为不用order by语句,会提高检索数据的速度的,尤其数据量越大时,第二种方法快速检索数据越明显。
最后提醒大家:oracle中慎用带有order by的分页。尤其是在oracle10g中,会出现会引起混乱,即相同记录会出现在不同页中。
结束语:
希望这篇文章不仅能够给大家的工作带来一定的帮助,也希望能让大家能够体会到分析问题的方法;最重要的是,希望这篇文章能够抛砖引玉,掀起大家的学习和讨论的兴趣,以共同促进。还有其中红色的字如果谁知道解决办法请告诉我,我会尽快补上的。
分享到:
评论

相关推荐

    数据库分页查询语句

    ### 数据库分页查询语句 #### 概述 在处理大量数据时,为了提高用户体验并减轻服务器压力,我们通常采用分页的方式展示数据。不同的数据库管理系统(DBMS)提供了各自的方法来实现分页功能。本文将详细介绍Oracle...

    易语言源码MYSQL数据库分页查询.rar

    易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页查询.rar 易语言源码MYSQL数据库分页...

    易语言MYSQL数据库分页查询

    在IT领域,数据库操作是至关重要的,特别是在处理大量数据时,分页查询是提高系统性能、优化用户体验的有效手段。易语言作为一款中国本土化的编程语言,提供了与MySQL数据库交互的能力,使得开发者能够轻松实现...

    jsp数据库分页查询及显示

    ### JSP数据库分页查询及显示 #### 一、引言 在Web开发中,当数据量较大时,为了提高用户体验以及减轻服务器负担,我们通常采用分页技术来展示数据。JSP(JavaServer Pages)作为Java平台上的一个重要组件,可以很...

    数据库分页查询整理(oracle、mysql、SqlServer、access、db2等)

    数据库分页查询整理 数据库分页查询是指从大量数据中提取特定范围的数据,以便于数据的显示和处理。不同的数据库管理系统(DBMS)有不同的分页查询语句,下面对 Oracle、DB2、SQL Server、MySQL、Access 等数据库的...

    易语言MYSQL数据库分页查询.rar

    易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar 易语言MYSQL数据库分页查询.rar

    数据库分页查询.doc

    数据库分页查询是数据库管理系统中常用的一种技术,用于在大量数据中检索特定范围的记录,以提高用户体验,尤其是网页或应用程序展示数据时。下面分别介绍MySQL、SQLServer和Oracle数据库的分页查询方法。 1. MySQL...

    web网站数据库分页查询设计与实现

    在Web开发中,数据库分页查询是不可或缺的一部分,特别是在处理大量数据时,为了提高用户体验和网站性能,分页成为了一种必要的数据展示策略。本文将深入探讨“Web网站数据库分页查询的设计与实现”,主要围绕JSP...

    数据库分页查询示例.

    ### 数据库分页查询原理与实现 在处理大量数据时,分页查询是提高用户体验、减少服务器负担的有效手段之一。本文将围绕“数据库分页查询示例”这一主题,通过不同的数据库系统(如MySQL、DB2、Oracle)来详细介绍...

    Qt编写的数据库分页demo

    **Qt编写的数据库分页demo**是一个用于展示如何在Qt应用程序中实现高效、用户友好的数据库数据分页功能的示例项目。这个demo的核心在于它能够处理大量的数据,如千万级记录,同时提供流畅的用户体验,包括上一页、...

    Qt数据库分页显示

    本教程将深入探讨如何在Qt应用中实现SQLite数据库的数据分页显示。 首先,我们需要在Qt项目中集成SQLite数据库支持。在Qt Creator中,新建一个Qt Widgets Application项目,然后在.pro文件中添加`QT += sql`来启用...

    Android开发之数据库的分页查询代码

    在Android应用开发中,数据库是数据存储的重要方式,特别是在处理大量数据时,为了提高用户体验,分页查询就显得尤为重要。本篇文章将详细讲解如何在Android中实现数据库的分页查询功能,以高效、流畅地加载和展示...

    Python数据库分页查询技术详解与实践

    数据库分页查询是处理大规模数据集时提升性能的重要技术。通过合理使用LIMIT和OFFSET子句、建立索引、避免使用SELECT *和使用主键分页等方法,可以显著提高分页查询的效率。本文提供的代码示例和最佳实践可以帮助你...

    达梦数据库的基本操作以及分页查询等

    根据java语言对达梦DM数据库的连接和操作,包括建表、新增、修改、删除、查询以及复杂查询和分页查询等完整代码,附送Dm7Dictionary的驱动包,此驱动包兼容jdk1.7和jdk1.8本人亲测完美兼容

    几种数据库分页查询的区别

    Oracle、MYSQL、sqlserver和DB2分页查询 分页查询

    数据库分页查询语句数据库查询

    数据库分页查询是数据库管理系统中一个非常常见的需求,特别是在网页展示大量数据时,为了提高用户体验,通常会将数据分成多页显示。本文将探讨不同数据库系统中如何进行分页查询,包括SQL Server、MySQL和Oracle。 ...

Global site tag (gtag.js) - Google Analytics