大家帮我看看,这两行代码,哪句效率高些,为什么,谢谢.

tdcq123 2008-03-23 11:45:21
大家帮我看看,这两行代码,哪句效率高些,为什么,谢谢.
--------------------------------------------

create table g1
(
f1 int,
f2 varchar(5)
)

insert into g1
select 1,'zzzz'
union all select 2,''
union all select 2,null
union all select 2,'bbbb'


select *
from g1

--我想查询所有不为null,而且不为空白字符串的记录
--我想问问下面两种方法,哪种效率高,为什么?

--方法1:
select *
from g1
where isnull(f2,'')<>''

--方法2:
select *
from g1
where f2 is not null and f2<>''
...全文
119 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Limpire 2008-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tdcq123 的回复:]
谢谢指教,可是我今天看到资料说,where语句中,对字段进行函数处理是不好的习惯,所以我才问这个问题的.
真的一样吗?
[/Quote]

where语句中,对字段进行函数处理是不好的习惯——同意

因为用了函数之后,相关的索引就用不上了。
Limpire 2008-03-24
  • 打赏
  • 举报
回复
isnull(f2,'')<>'' = (if f2 is null then '' else f2) <> ''
二次判断比较

if f2 is not null and f2<>''
也是二次判断
-晴天 2008-03-24
  • 打赏
  • 举报
回复
应该是有一些区别,但肯定不是很大.
第一种进行一次函数运算,再进行一次比较运算.(ISNULL函数进行一次比较运算和一次替换操作)
第二种进行三次比较运算
操作都是在CPU内部进行的,对速度影响不会很大.
山之魂2 2008-03-24
  • 打赏
  • 举报
回复
where语句中,对字段进行函数处理是不好的习惯——同意
因为用了函数之后,相关的索引就用不上了。

同意
tdcq123 2008-03-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Limpire 的回复:]
where语句中,对字段进行函数处理是不好的习惯——同意
因为用了函数之后,相关的索引就用不上了。
[/Quote]
谢回复,那么是不是就是说,如果对fd字段建索引的话,第二种方法比第一种好呀,因为第一种无法使用索引.
如果不建索引的话,效果都是一样的,是吗?
viva369 2008-03-24
  • 打赏
  • 举报
回复
看执行计划是不是有效的使用了索引查找,都可以判断
viva369 2008-03-24
  • 打赏
  • 举报
回复
可以打开
set statistics io on
看看哪个逻辑读取少
dichun 2008-03-23
  • 打赏
  • 举报
回复
数据量少没有区别,

如果数据量超过几百万,第二个效果最明显,
建议你在数据库设计时,给FA一个默认值比较好,语句更简练,效率更高.
tdcq123 2008-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Limpire 的回复:]
仍然是一样的效率
[/Quote]

谢谢指教,可是我今天看到资料说,where语句中,对字段进行函数处理是不好的习惯,所以我才问这个问题的.
真的一样吗?
Limpire 2008-03-23
  • 打赏
  • 举报
回复
仍然是一样的效率

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧