关于这个内链接与两条语句的效率问题

usxue 2007-11-05 04:48:05
在我写存储过程进行操作的时候,我必须要先判断用户的合法性:

if not exists(select 1 from userInfo where userid=@uid and userPwd=@pwd) or not exists(select 1 from groupMember where userid=@uid)
return
insert操作语句....


上面判断用户合法行的操作如果变成一句的话:

if not exists(select 1 from userInfo ui join groupMember gm on gm.userid=ui.userid where ui.userid=@uid and ui.userPwd=@pwd)
return
insert操作语句....

其中,userInfo中的userid是唯一的索引。

这两种判断用户合法性的效率哪个要高一点?请各位给个说法,谢谢!
...全文
114 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HeroHxw 2007-11-06
  • 打赏
  • 举报
回复
应该是第一种效率高,连接语句建立笛卡尔集的时候是非常耗资源的。
fcuandy 2007-11-06
  • 打赏
  • 举报
回复
效率上,看具体的记录数用来处理的字段的值,及连接出来的行数.
chuifengde 2007-11-06
  • 打赏
  • 举报
回复
我觉得从逻辑运算上两判断是一样的,但从效率上没有绝对的高和低,这跟表内的索引和统计信息及数据分布有一定关系,另外第一句如果前半部分满足时后半部分就不判断了,这时可能效率高,但不论如何第二句都是要两表连接的
playwarcraft 2007-11-06
  • 打赏
  • 举报
回复
1,2是一樣的
建議用第1個,可讀性也好
usxue 2007-11-06
  • 打赏
  • 举报
回复
to 3楼,
为啥说这两种其中一种是错误的?
两种判断的结果不一样吗?
fcuandy 2007-11-05
  • 打赏
  • 举报
回复
第一条是 A非 或 B非.
第二条是 A与B 的非
在逻辑运算上,二者是可以转换的.


dobear_0922 2007-11-05
  • 打赏
  • 举报
回复
补充一下2楼的:要么第一种写法错了,要么第二种写法错了~!~!
dobear_0922 2007-11-05
  • 打赏
  • 举报
回复
第一种效率比第二种高很多,,,
而且第二种是错的(@uid 必须在userInfo和groupMember两个表中都有时,才返回1,否则返回null,这与第一种不一样 )!
internetroot 2007-11-05
  • 打赏
  • 举报
回复
应该是第一种效率高些吧,第一种没有 join groupMember gm on gm.userid=ui.userid 之类的连接语句,连接语句建立笛卡尔集的时候是非常耗资源的。你可以用查询分析器的 显示预定执行计划 的功能查看效率啊。

34,838

社区成员

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

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