我可以将键索引/插入 DB2 大表以加速选择吗?

问题描述 投票:0回答:0

我知道这个问题可能已经被问过很多次了,但请耐心等待;我在 stackoverflow 上找不到关于我的具体情况的答案。我也不是 SQL 专家,特别是 DB2 SQL。

我需要加快从 person 表 中进行选择的速度,该表有超过 500 万行。它是一个旧的 DB2 表,没有智能结构,也没有主键或任何东西。 但是,我可以创建键或索引,如果它有帮助所以我的问题是:它有帮助吗?如果是,创建键/索引的最佳方法是什么?情况是这样的:

除了姓名和地址等信息外,该表还包含一个 PERSONTYPE(字符 1)、一个 PERSONCODE(字符 8)和一个 DNUM(字符 16),其中 DNUM 是一种与此人相关的案例编号. (如果一行有 DNUM,则它没有 PERSONCODE。)我需要找到所有具有 DNUM 特定子集的行。几行可以有相同的 DNUM,因为几个人可以绑定到一个案例。所以这是 SQL:

SELECT NAME, ADRESS, SHOESIZE FROM PERSONTABLE WHERE DNUM IN ([a set of 1000 DNUMS])

此查询大约需要 55 秒才能产生结果。作为比较,这个查询:

SELECT NAME, ADRESS, SHOESIZE FROM PERSONTABLE P JOIN OTHERTABLE O ON (P.PERSONCODE = O.PERSONCODE) WHERE O.DNUM IN ([same set of 1000 DNUMS])

大约需要 2 秒。 (是的,这个 OTHERTABLE 也有 DNUM 列。)

这是一个数据迁移项目的一部分,整个执行时间的 95% 都被第一个 SQL 消耗掉了,所以我热衷于尝试加快速度。

我能够为 PERSONTABLE 索引和插入键,但由于 DNUM 不是唯一列,我无法将其设为主键。但是,PERSONTABLE 中有一个 ORDER_NUMBER 列,它为案例中涉及的每个人编号,因此 DNUM+ORDER_NUMBER 可能成为主键。但这会加快选择速度吗?这是一张旧桌子,不想在不知道它会做什么的情况下弄乱它。

你们有什么建议吗?

sql performance select db2
© www.soinside.com 2019 - 2024. All rights reserved.