我有一个DB2数据库,有三个表,A、B和C。
因此,建立了数据库:
创建数据库DB别名DB自动存储是在/home/db2inst1上使用代码设计集UTF-8域en PAGESIZE 32768
所有表都有列PID。
我需要一个表,它聚合了表B和表C中的一些信息。选择适当项的查询是:
SELECT
T.*,
(
SELECT
COALESCE(SUM(ROW_COUNT),0)
FROM
C as ITS,
B as ITL
WHERE
ITS.ROLE = 1
AND ITS.PID = ITL.PID
AND ITS.PID_S = ITL.C_SOURCE
AND ITS.PID = T.PID
) AS RR
FROM
A as T;当运行此查询时,DB2服务器快速使用大约3Gb的内存。然而,使用top时,CPU的使用率很少超过5%,有些会跳转到13%左右。DB2服务器是一个RedHat6.2VM,有4个核,每个核心有2 2Ghz。
我让这个查询运行了24小时,似乎没有发生任何事情。其他查询,比如简单的选择和更多的查询,都能顺利地工作。
问题:
发布于 2013-02-13 11:32:00
我会尝试使用“解释”特性,看看db2从您的查询中得到了什么
db2exfmt -d数据库-e模式-t -v % -w -1 -s % -# 0 -n % -g OTIC
发布于 2017-11-28 13:37:29
如果使用嵌套选择,我建议在第二个查询中调用表A,并将联接条件保留在表A上。
我认为它可以优化查询的响应时间,但这完全取决于表的创建(例如,索引声明)。
诚挚的问候,
https://stackoverflow.com/questions/14849622
复制相似问题