首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NVL()降低性能

NVL()降低性能
EN

Stack Overflow用户
提问于 2013-07-25 07:03:46
回答 2查看 8.4K关注 0票数 2

传递表有1731791+行。具有0,1,空值的homedl列。

当homedl列不等于1时,我想要获取记录。

在这里,哪个查询的性能最好?

代码语言:javascript
复制
select homedl 
  from delivery 
 where item_id='1343275' 
   AND NVL(homedl,0) <> 1 
   and item_type=0;

代码语言:javascript
复制
select homedl 
  from delivery 
 where item_id='1343275' 
   AND (homedl<>1 or homedl is null)  
   and item_type=0;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-25 11:28:21

首先,让我们看看数据,有多少个传递记录具有homedl=1或homedl=0或have为null:

代码语言:javascript
复制
select homedl , count(*)
  from delivery 
group by homedl

如果空和零的计数明显小于1的计数,则应该创建一个基于函数的索引,该索引将用于此查询:

代码语言:javascript
复制
create index user2582602_idx on delivery (NVL(homedl,0));

然后选择如下:

代码语言:javascript
复制
select homedl 
  from delivery 
 where item_id='1343275' 
   AND NVL(homedl,0) = 0 
   and item_type=0;
票数 1
EN

Stack Overflow用户

发布于 2013-07-25 09:40:40

对您的问题的回答取决于许多因素,例如RDBMS供应商,homedl列中存在什么类型的索引(如果有的话)。我假定item_iditem_type已经有了适当的索引。

可以更好地使用以下查询:

从传递中选择homedl,其中item_id='1343275‘以及coalesce(homedl, 2)<>1和item_type=0;

如果item_id是主键,那么对于您提到的不同查询,查询执行时间并不重要,因为explain [sql query]将向您显示所使用的键是PRIMARY

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17851185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档