首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在最高性能的DB2中查询数据范围?

如何在最高性能的DB2中查询数据范围?
EN

Stack Overflow用户
提问于 2008-11-05 16:59:15
回答 4查看 25.9K关注 0票数 7

通常,我需要从某个范围内的表中检索数据;例如,每个搜索结果对应一个单独的页面。在MySQL中我使用LIMIT关键字,但在DB2中我不知道。现在我使用这个查询来检索数据范围。

代码语言:javascript
运行
复制
SELECT * 
FROM(
   SELECT  
      SMALLINT(RANK() OVER(ORDER BY NAME DESC)) AS RUNNING_NO
      , DATA_KEY_VALUE
      , SHOW_PRIORITY
   FROM 
      EMPLOYEE
   WHERE 
      NAME LIKE 'DEL%'
   ORDER BY
      NAME DESC
   FETCH FIRST 20 ROWS ONLY
) AS TMP
ORDER BY 
  TMP.RUNNING_NO ASC
FETCH FIRST 10 ROWS ONLY

但我知道这是不好的风格。那么,如何查询最高性能呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-14 02:12:46

我的需求已经添加到DB2 9.7.2中了。

DB2 9.7.2增加了限制查询结果的新语法,如下图所示:

代码语言:javascript
运行
复制
SELECT * FROM TABLE LIMIT 5 OFFSET 20

数据库将从第21 - 25行检索结果

票数 8
EN

Stack Overflow用户

发布于 2008-11-07 18:34:43

不确定为什么要创建TMP表。RUNNING_NO不是按升序排列的吗?我会想:

代码语言:javascript
运行
复制
SELECT SMALLINT(RANK() OVER(ORDER BY NAME DESC)) AS RUNNING_NO,
       DATA_KEY_VALUE,
       SHOW_PRIORITY
  FROM EMPLOYEE
 WHERE NAME LIKE 'DEL%'
 ORDER BY NAME DESC
 FETCH FIRST 10 ROWS ONLY

也会得到同样的结果。

在EMPLOYEE表上建立一个高于姓名的索引将提高此查询的性能。

票数 3
EN

Stack Overflow用户

发布于 2011-01-04 17:18:12

这是非常困难的,这取决于你有哪个数据库。

例如:

代码语言:javascript
运行
复制
SELECT * FROM ( 
    SELECT 
      ROW_NUMBER() OVER (ORDER BY ID_USER ASC) AS ROWNUM,  
      ID_EMPLOYEE, FIRSTNAME, LASTNAME 
    FROM EMPLOYEE 
    WHERE FIRSTNAME LIKE 'DEL%' 
  )  AS A WHERE A.rownum
BETWEEN 1 AND 25
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/265850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档