首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有总计数和分页的优化db2查询

具有总计数和分页的优化db2查询
EN

Stack Overflow用户
提问于 2015-02-20 17:05:33
回答 2查看 1.3K关注 0票数 1

我有一个复杂的问题,为了更好的理解,我正在简化它。

查询:查询具有组by、order、where子句和与其他表的多个联接。

代码语言:javascript
复制
SELECT FIRSTNAME, LASTNAME FROM CUSTOMERS ;

需求:需要优化的方法,获取大查询的记录总数以及分页。

我的方法1:首先执行两个查询以查找计数,然后分页行从客户中选择COUNT(1);

代码语言:javascript
复制
SELECT FIRSTNAME, LASTNAME, ROWNUMER FROM (
SELECT FIRSTNAME, LASTNAME, ROW_NUMBER() OVER(ORDER BY CUSTOMERCID) AS ROWNUMER FROM CUSTOMERS 
)WHERE ROWNUMER BETWEEN 10 AND 20;

我的方法2:查找总计数以及在单个查询中获取所需的分页行。

代码语言:javascript
复制
SELECT FIRSTNAME, LASTNAME, ROWNUMER, COUNTROWS FROM (
          SELECT FIRSTNAME, LASTNAME, ROW_NUMBER() OVER(ORDER BY CUSTOMERCID) AS ROWNUMER
          FROM CUSTOMERS 
) AS CUST, (SELECT COUNT(1) AS COUNTROWS   FROM CUSTOMERS ) AS COUNTNUM
WHERE ROWNUMER BETWEEN 10 AND 20;

My 3:创建第二种方法的视图。

请建议我应该选择哪种方法?根据我的研究,随着数据库视图的优化,第三种方法将比其他方法更加优化。

EN

回答 2

Stack Overflow用户

发布于 2015-02-20 17:36:49

没有任何视图比包含在视图中的查询更能自动使其“优化”。查询优化器对原始SQL进行分解,并通常在执行之前将其重写为一个非常不同的语句。

在执行RUNSTATS以确保表和索引具有准确的统计信息之后,DB2内置的解释工具(如db2expln实用程序、Design (db2advis)和IBM中的Visual )提供了最佳的机会来准确理解为什么特定查询选项比另一个查询更好或更糟糕。

票数 0
EN

Stack Overflow用户

发布于 2015-02-21 00:06:53

分页的最佳性能是当最少的数列正在执行工作时(分页),然后通过键列加入结果以获得更多的数据。两个列控制分页、customercid和行号,第一列是已经索引的主键,因为我假设customercid是唯一的。客户端也在row_number()函数中,因此这是最有效的分页。

代码语言:javascript
复制
create view dancustomercid as 
SELECT CustomerCID, ROW_NUMBER() OVER(ORDER BY CUSTOMERCID) AS ROWNUMER FROM CUSTOMERS 

然后,在视图的输出上加入,注意没有订单可以使事情慢下来,只需要在关键字段customercid上加入。

代码语言:javascript
复制
SELECT FIRSTNAME, LASTNAME, ROWNUMBER from dancustomercid a join CUSTOMERCID AS b on
a.customercid = b.customercid where a.ROWNUMER  
BETWEEN 11 AND 20;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28634389

复制
相关文章

相似问题

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