【发布时间】:2017-02-14 13:33:41
【问题描述】:
我不得不编写一些查询,这些查询将涉及对一些相当大的表(几百万条记录)进行表扫描。
(我知道这是一个糟糕的想法,我正在推动一种不涉及这个的替代方法,但现在这是我坚持的方法。在相关字段上创建索引可能不会是批准的选项。)
对于某些表,有多个字段可能与目标值匹配。 我想,但我只是想确认一下,使用 OR 的单个查询会比多个查询更快。那就是:
SELECT keyinfo FROM TABLE1 WHERE field1 = target OR field2 = target OR field3 = target;
会比
SELECT whatever FROM TABLE1 WHERE field1 = target;
SELECT whatever FROM TABLE1 WHERE field2 = target;
SELECT whatever FROM TABLE1 WHERE field3 = target;
直觉上这似乎是正确的,因为它只需要扫描表一次。但它确实必须测试多个领域,所以不确定你失去了多少收益。快速测试证实了这一点,但我不确定是否在后台构建了任何影响结果的临时索引。
更多信息: 我希望在大多数情况下找不到匹配项,但我确实需要所有匹配项(如果存在),所以我不能只将其限制为 FETCH FIRST 1 ROWS ONLY。 此外,它是 z/OS DB2。
鉴于我可能需要为多个 target 运行它,我可能最终会将所有相关字段拉到一个临时表中,因为我应该能够在此基础上建立一个索引,总体上应该更快。但我现在只是对表扫描问题感到好奇。
【问题讨论】:
标签: sql db2 query-performance db2-zos