`
javathinker
  • 浏览: 241394 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

关于 DB2 的 数据库分页技术 分段查询

 
阅读更多

---SQL语句---
SELECT MercId, MerNam FROM (
SELECT MercId, MerNam,
rownumber() OVER
(ORDER BY MercId ASC) AS ROW_NEXT
FROM mercbillinf
WHERE (MercId like '%%%s%%' or '%s'='') and MerNam like '%%%s%%'
)
AS TEMP WHERE
TEMP.ROW_NEXT BETWEEN %s and %s


%s 替代域 如下 分隔符| :


Fields : MercId|MercId|MerNam|beginRow|endRow

查询条件:MercId ,MerNam

查询表: mercbillinf

查询分页:from beginRow(例如40) to endRow(例如50)

利用 ROW_NUMBER()函数 即可实现

----------------------------------

参考文档 : IBM 技术中心

使用 DB2 提供的功能实现分页

对于在数据库和应用程序成为产品之前可以在其中进行一些设计工作的应用程序来说,该方法比较适合。

下面我们假设,用户希望将产品按照每页 20 条结果的方式来分页显示。我们都知道,在关系表中行与行之间并没有特定的顺序。因此,需要将 SQL 查询设计为允许按照某一特定的顺序来检索数据,这可以通过对主键使用 ORDER BY 子句来实现,在这个例子中,主键就是产品 id。

DB2 允许对结果集(result set)进行动态排序,并且可以从结果集的开始部分或者结尾部分获取任意数量的行。

下面是一个查询,用于根据类别“Books”从产品表中选择前 20 条记录。

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_DESCRIPTION,
  PRODUCT_PRICE, PROD_CATEGORY_ID
  FROM PRODUCT,PRODUCT_CATEGORY 
  WHERE
     PRODUCT.PROD_CATEGORY_ID
     = PRODUCT_CATEGORY.CATEGORY_ID 
  AND
     PRODUCT_CATEGORY.CATEGORY_ID = 'Books'
  ORDER BY PRODUCT.PRODUCT_ID 
  FETCH FIRST 20 ROWS ONLY 

ORDER BY 子句将强制在内存中对整个结果集进行排序,因此,为了提高 DB2 服务器的性能,我们将不使用这个子句(尽管在只发送 10 行记录到客户机时,使用 ORDER BY 子句可能会提高网络性能)。

如果不考虑顺序,而只是想要按照用户的标准获取前 20 行,那么我们就可以避免使用 ORDER BY 子句,从而就不必在 DB2 服务器上进行排序了:

SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_DESCRIPTION,
  PRODUCT_PRICE, PROD_CATEGORY_ID
  FROM PRODUCT,PRODUCT_CATEGORY 
  WHERE
    PRODUCT. PROD_CATEGORY_ID
    = PRODUCT_CATEGORY.CATEGORY_ID 
  AND
    PRODUCT_CATEGORY.CATEGORY_ID = 'Books'
  FETCH FIRST 20 ROWS ONLY 

既然应用程序要求每页显示 20 条结果,那么我们可以使用由 DB2 提供的 row_next() 功能。

以下是一个示例,演示了如何从编号为 21 到 40 的行中选择结果。我们假设用户定下的选择标准是:类别为“Books”,产品描述为“Application Servers”。

SELECT * FROM (
  SELECT PRODUCT_ID, PRODUCT_NAME,
    PRODUCT_DESCRIPTION, PRODUCT_PRICE, 	
    rownumber() OVER
     (ORDER BY PRODUCT_ID)
     AS ROW_NEXT 
    FROM PRODUCT,PRODUCT_CATEGORY WHERE
      PRODUCT.PROD_CATEGORY_ID
      = PRODUCT_CATEGORY.CATEGORY_ID 
    AND
      PRODUCT_CATEGORY.CATEGORY_ID = 'Books'
    AND 
      PRODUCT.PRODUCT_DESCRIPTION LIKE 
	   'Application Servers'
  )
AS PRODUCT_TEMP WHERE 
ROW_NEXT BETWEEN 21 and 40 

在一个基于 Web 的应用程序中,参数 “21” 和 “40”可以在运行时指定。下面是修改后的查询:

SELECT * FROM (
  SELECT PRODUCT_ID, PRODUCT_NAME,
    PRODUCT_DESCRIPTION, PRODUCT_PRICE, 	
    rownumber() OVER
    (ORDER BY PRODUCT_ID) AS ROW_NEXT 
    FROM PRODUCT,PRODUCT_CATEGORY
	WHERE
      PRODUCT. PROD_CATEGORY_ID
      = PRODUCT_CATEGORY.CATEGORY_ID 
    AND
      PRODUCT_CATEGORY.CATEGORY_ID = 'Books'
    AND 
      PRODUCT. PRODUCT_DESCRIPTION LIKE 
	   'Application Servers'
  )
AS PRODUCT_TEMP WHERE 
ROW_NEXT BETWEEN ? and ? 

rownumber() 函数允许开发人员动态地将行号指定给结果集。

如果去掉 row_next 子句( ROW_NEXT BETWEEN ? and ? ),那么将返回所有匹配选择标准的行。

上面使用的 SELECT * FROM 子句可以看作一个临时表,里面存有匹配选择标准的整个结果集,然后从这个临时表中返回落在给定行范围内的结果集。

使用 rownumber() 功能时对系统会有额外的性能影响,因为数据库首先要获取所有匹配选择标准的行,然后再返回落在给定范围内的那些行。

接下来,我们来权衡一下这种方法以及使用这种方法的好处,再看看在什么情况下使用这种方法比较合适。

http://www.ibm.com/developerworks/cn/data/library/techarticles/0307balani/0307balani.html

分享到:
评论

相关推荐

    db2数据库安装包、db2数据库安装驱动

    DB2是IBM公司开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。本压缩包包含DB2数据库的安装包以及链接服务器驱动,对于理解DB2数据库的安装过程和使用至关重要。 首先,我们来详细了解DB2数据库...

    数据库分页SQL

    常用数据库分页sql(),1.oracle数据库分页;2.DB2数据库分页;3.SQL Server 2000数据库分页;4.SQL Server 2005数据库分页5.MySQL数据库分页

    db2 数据库连接客户端

    "squirrel-sql-3.3.0"是这个工具的一个版本,SQuirreL SQL Client是一个流行的开源SQL查询工具,适用于多种关系型数据库,包括DB2。 SQuirreL SQL Client通过JDBC(Java Database Connectivity)接口与数据库进行...

    DB2数据库性能调整和优化 牛新庄 PDF

    DB2数据库性能调整和优化(第2版)侧重于介绍DB2数据库的性能调优。性能调优是一个系统工程:全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源;深刻理解DB2的锁及并发机制、索引原理、数据库...

    db2数据库sql语句大全

    根据提供的标题、描述以及部分文本内容,我们可以整理出与DB2数据库相关的多个知识点。下面将对这些内容进行详细的解析和扩展: ### DB2数据库SQL语句大全 #### 1. 强制关闭所有应用程序 ```sql db2...

    DB2数据库常用技术总结

    DB2数据库作为IBM开发的关系型数据库管理软件,其在...以上技术涵盖了DB2数据库在实际开发中常见的操作,包括连接、查询、转换、错误处理和存储过程等。理解并熟练运用这些技术,对于DB2数据库的管理和维护至关重要。

    Linux系统重启db2数据库命令实例详解.docx

    在Linux系统中,管理IBM的db2数据库通常涉及一系列的命令行操作。本文将深入解析如何使用这些命令来重启db2数据库,同时介绍一些相关的常用命令。 首先,重启db2数据库之前,必须确保没有任何应用程序正在与数据库...

    db2数据库目录结构

    DB2 数据库目录结构 DB2 数据库目录结构是 DB2 数据库的核心组件之一,它是 DB2 数据库的存储和管理的基础。DB2 数据库目录结构主要包括以下几个部分:实例目录、数据库目录、日志目录、恢复历史文件、缓冲池文件、...

    DB2数据库SQL注入手册1

    DB2数据库SQL注入手册 DB2数据库SQL注入手册是指在使用DB2数据库时,如何检测和...DB2数据库SQL注入手册提供了检测和防止SQL注入攻击的方法和技术。通过遵循这些指南,可以有效地防止SQL注入攻击,保护数据库安全。

    DB2数据库系统安全配置基线

    DB2数据库系统安全配置基线是一份详细的指南,旨在确保DB2数据库系统的安全性,遵循最佳实践,以防止未授权访问和潜在的数据泄露。本指南涵盖了多个关键领域,包括账号管理、口令策略、权限控制以及认证和审计机制。...

    db2数据库性能优化小技巧

    Bufferpool是DB2数据库用于缓存数据页的一种内存结构,它能够存储数据页和索引页,以减少磁盘I/O操作,提高查询效率。每个Bufferpool都有一个特定的名称,并且可以被多个表空间共享。 #### 1.2 Bufferpool配置参数...

    DB2数据库系统命令与配置参数手册.doc

    DB2数据库系统命令与配置参数手册 本手册主要介绍了DB2数据库系统的命令和配置参数,涵盖了DB2管理服务器、实例、数据库、表、索引、视图、存储过程、触发器、函数等方面的知识点。下面将逐一详细介绍这些知识点。 ...

    DB2数据库安装、数据库创建步骤

    DB2 数据库安装、数据库创建步骤 DB2 数据库安装步骤是指将 DB2 数据库软件安装到计算机上,并创建一个新的数据库实例,以便存储和管理数据。下面是 DB2 数据库安装和创建步骤的详细过程: 一、安装 DB2 数据库...

    db2数据库驱动9.7jar包

    在Java编程环境中,为了能够与DB2数据库进行交互,如执行SQL查询、更新数据或管理数据库对象,需要引入特定的驱动程序。在这个案例中,我们有两个主要的JAR文件:db2jcc4.jar和db2jcc.jar。 1. **db2jcc4.jar** - ...

    Db2数据库操作的常用命令列表

    Db2数据库操作的常用命令列表 Db2数据库操作的常用命令列表中包含了多个重要的数据库操作命令,这些命令对Db2数据库的管理和维护至关重要。本文将对这些命令进行详细的解释和分析,帮助读者更好地理解和掌握Db2...

    DB2数据库安装教程

    DB2数据库安装教程 DB2数据库安装教程详细描述了DB2数据库在Linux环境中的安装。以下是安装过程中涉及到的知识点: 1. 用户和用户组的创建:在安装DB2之前,需要创建相应的用户和用户组,例如db2iadm1、db2fadm1和...

    命令行登录db2数据库

    通过启动`db2cmd`,我们可以访问与DB2相关的各种工具和命令,包括连接、查询、管理数据库等。 步骤1:在Windows操作系统中,你可以通过“开始”菜单找到“运行”选项,或者直接按下键盘上的Win+R快捷键打开“运行”...

    一个关于DB2数据库学习文档集

    DB2数据库是一款由IBM开发的关系型数据库管理系统,广泛应用于企业级的数据存储和管理。这个文档集是针对DB2的学习资源,包含了多个方面的内容,对于深入理解和掌握DB2有着极高的价值。 首先,DB2函数文档详细列出...

    DB2数据库连接驱动jar包

    DB2数据库连接驱动jar包是用于Java应用程序与IBM的DB2关系型数据库系统进行通信的重要组件。这些jar包提供了JDBC(Java Database Connectivity)驱动程序,使得Java开发者可以通过编写Java代码来执行SQL语句,从而...

    DB2数据库学习资料

    以下是一些关于DB2数据库的关键知识点,这些知识点对于初学者或有经验的DBA都非常有用: 1. **节点管理**: - `db2 list node directory` 命令用于查看本地节点目录,了解已注册的数据库服务器信息。 - `db2 ...

Global site tag (gtag.js) - Google Analytics