传递表有1731791+行。具有0,1,空值的homedl列。
当homedl列不等于1时,我想要获取记录。
在这里,哪个查询的性能最好?
select homedl
from delivery
where item_id='1343275'
AND NVL(homedl,0) <> 1
and item_type=0;或
select homedl
from delivery
where item_id='1343275'
AND (homedl<>1 or homedl is null)
and item_type=0;发布于 2013-07-25 11:28:21
首先,让我们看看数据,有多少个传递记录具有homedl=1或homedl=0或have为null:
select homedl , count(*)
from delivery
group by homedl如果空和零的计数明显小于1的计数,则应该创建一个基于函数的索引,该索引将用于此查询:
create index user2582602_idx on delivery (NVL(homedl,0));然后选择如下:
select homedl
from delivery
where item_id='1343275'
AND NVL(homedl,0) = 0
and item_type=0;发布于 2013-07-25 09:40:40
对您的问题的回答取决于许多因素,例如RDBMS供应商,homedl列中存在什么类型的索引(如果有的话)。我假定item_id和item_type已经有了适当的索引。
可以更好地使用以下查询:
从传递中选择homedl,其中item_id='1343275‘以及coalesce(homedl, 2)<>1和item_type=0;
如果item_id是主键,那么对于您提到的不同查询,查询执行时间并不重要,因为explain [sql query]将向您显示所使用的键是PRIMARY。
https://stackoverflow.com/questions/17851185
复制相似问题