Sql 表扫描匹配多个字段中的一个或多个语句

Sql 表扫描匹配多个字段中的一个或多个语句,sql,db2,query-performance,db2-zos,Sql,Db2,Query Performance,Db2 Zos,我不得不写一些查询,这些查询将涉及对一些相当大的表(几百万条记录)的表扫描 我知道这是一个糟糕的想法,我正在推动一种不涉及这一点的替代方法,但现在这正是我所坚持的。在相关字段上创建索引也可能不是一个被批准的选项 对于某些表,有多个字段可能与目标值匹配。 我会认为,但我只是想确认,一个带有或将比多个查询更快的查询。即: SELECT keyinfo FROM TABLE1 WHERE field1 = target OR field2 = target OR field3 = target; 会

我不得不写一些查询,这些查询将涉及对一些相当大的表(几百万条记录)的表扫描

我知道这是一个糟糕的想法,我正在推动一种不涉及这一点的替代方法,但现在这正是我所坚持的。在相关字段上创建索引也可能不是一个被批准的选项

对于某些表,有多个字段可能与目标值匹配。 我会认为,但我只是想确认,一个带有或将比多个查询更快的查询。即:

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; 
直观地看,这似乎是正确的,因为它只需扫描表一次。但它确实需要测试多个领域,所以不确定你在这方面损失了多少收益。快速测试证明了这一点,但我不确定是否有任何临时索引正在后台构建,这会影响结果

进一步资料: 我希望在大多数情况下都找不到匹配项,但我确实需要所有匹配项(如果有的话),所以我不能仅将其限制为只获取前1行。 另外,它是z/OSDB2

考虑到我可能需要对多个目标运行此操作,我可能最终会将所有相关字段拖出到一个临时表中,因为我应该能够在此基础上构建一个索引,总体而言,这应该要快得多。但我现在只是对表格扫描问题感到好奇。

or不一定更好。数据库很难在多个字段上使用索引或条件。DB2可能足够好,可以针对这种情况进行优化。但是,您可以将性能和执行计划与以下内容进行比较:

SELECT whatever FROM TABLE1 WHERE field1 = target
UNION ALL
SELECT whatever FROM TABLE1 WHERE field2 = target AND field1 <> target
UNION ALL
SELECT whatever FROM TABLE1 WHERE field3 = target AND field1 <> targe AND field2 <> target; 

数据库基于查询构建执行计划,而不包含参数值。无论提供的实际值是什么,每次运行查询时都会使用此查询

我认为,你最好看一下执行计划或解释这两种查询的计划;使用OR和使用UNION子句