交货表有1731791+行。 具有0,1,NULL值的homedl列。NVL()降低性能
我要取的记录,每当homedl列不等于1
哪个查询将在这里给出最佳的性能
select homedl
from delivery
where item_id='1343275'
AND NVL(homedl,0) <> 1
and item_type=0;
OR
select homedl
from delivery
where item_id='1343275'
AND (homedl<>1 or homedl is null)
and item_type=0;
只需检查执行计划,也许? –
您是否尝试过运行并查看性能并解释计划?如果你在item_id上有一个索引,那么它应该是无关紧要的。 –
查询计划是否有所不同?我期望这两个查询产生相同的计划,并因此执行相同的操作。如果'homedl'上有索引,则使用函数或查找NULL值可能会阻止索引被使用。如果您声明自己的性能不佳,那么我会怀疑添加'NVL'会阻止使用索引,通过创建基于函数的索引可以弥补索引的不足。 –