我搜索了这个但找不到我需要的回复。如果有人问过这个问题,我深表歉意。
我问的是关于DB2
但我想这一般来说适用于几乎任何数据库。
无论如何,假设我在同一个数据库中有两个表:
select ID, EMAIL from TBL1
select ID, EMAIL from TBL2
然后我想做的是在这两个表中搜索一个字段。该字段可以在任一表中。
所以,我尝试了以下方法:
select ID, EMAIL from TBL1 where EMAIL = '[email protected]'
union
select ID, EMAIL from TBL2 where EMAIL = '[email protected]'
这行得通。但是是多余的和丑陋的。
但是,它是否比以下更有效:
select T.* from
(
select ID, EMAIL from TBL1
union
select ID, EMAIL from TBL2
) T where T.EMAIL = '[email protected]'
两者似乎都有效。不幸的是,我没有任何真正的 DB2 分析工具(以及受限访问),所以我似乎无法弄清楚哪个更好。它们在控制台中的执行速度大致相同,但这不是一个好的指标。
对此的任何提示(或什至如何自己进行概要分析)将不胜感激。
当然,这是一个高度简化的例子。真正的查询非常庞大,跨越 9-18 个表、数据库等。
谢谢
编辑
DB2 已打开iSeries
,但我不知道它是什么版本。我尝试使用的所有东西都会出错。我想说它是第 8 版,但我真的不知道。
如果有人想告诉我如何提供更多信息,我会的。我对 DB2 了解不多。
您需要使用 DB2 中的解释工具来回答这个问题,它与您正在执行的实际查询高度相关,并且您无法获得一般性答案。
IBM i 7.2(和以前的版本)有Visual Explain。
如果您被限制这样做,那么您需要与您的环境的系统或数据库管理员联系。