我不得不编写一些查询,这些查询将涉及对一些相当大的表(几百万条记录)进行表扫描。
(我知道这是一个糟糕的想法,我正在推动一种不涉及这个的替代方法,但现在这是我坚持的方法。在相关字段上创建索引可能也不是一个被批准的选项.)
对于某些表,有多个字段可能与目标值匹配。我想,但我只是想确认一下,使用 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。
鉴于我可能需要为多个目标运行它,我可能最终会将所有相关字段拉到一个临时表中,因为我应该能够在其上建立一个索引,总的来说应该快得多。但我现在只是对表扫描问题感到好奇。