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

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<>''
...全文
88 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
仍然是一样的效率
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-23 11:45
社区公告
暂无公告