首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建不导致DB2挂起的查询?

如何创建不导致DB2挂起的查询?
EN

Stack Overflow用户
提问于 2013-02-13 08:50:13
回答 2查看 566关注 0票数 4

我有一个DB2数据库,有三个表,A、B和C。

因此,建立了数据库:

创建数据库DB别名DB自动存储是在/home/db2inst1上使用代码设计集UTF-8域en PAGESIZE 32768

  • 表A宽28栏,磨1.8磨。行和PID是主键。列主要有int类型,但有些是varchar(200-400).指数: PID
  • 表B宽7列,磨14磨。行和主键PID_L。它还有列C_SOURCE和ROW_COUNT。指数: PID,C_SOURCE
  • 表C宽20列,磨14磨。行和主键PID_S。它还有一个列角色。指数: PID,PID_S

所有表都有列PID。

我需要一个表,它聚合了表B和表C中的一些信息。选择适当项的查询是:

代码语言:javascript
复制
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小时,似乎没有发生任何事情。其他查询,比如简单的选择和更多的查询,都能顺利地工作。

问题:

  1. 对于一个不同的、更高效的查询,您有什么建议可以完成同样的任务吗?
  2. 这个性能问题是否可能与数据库的配置有关?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-13 11:32:00

我会尝试使用“解释”特性,看看db2从您的查询中得到了什么

db2exfmt -d数据库-e模式-t -v % -w -1 -s % -# 0 -n % -g OTIC

票数 3
EN

Stack Overflow用户

发布于 2017-11-28 13:37:29

如果使用嵌套选择,我建议在第二个查询中调用表A,并将联接条件保留在表A上。

我认为它可以优化查询的响应时间,但这完全取决于表的创建(例如,索引声明)。

诚挚的问候,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14849622

复制
相关文章

相似问题

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