首页 新闻 赞助 找找看

请教一个sql问题,暂时放在首页

0
[已关闭问题]
declare @CustomerID uniqueidentifier <P><BR>set @CustomerID = '129F1B78-5373-4196-BE92-253762896ADB' </P> <P>&nbsp;</P> <P><BR>select a.* from opvoucher a <BR>WHERE&nbsp;&nbsp;&nbsp; (a.customercode = @CustomerID or @CustomerID is null ) </P> <P>&nbsp;</P> <P><BR>select a.*&nbsp; from opvoucher a <BR>WHERE&nbsp; (a.customercode = @CustomerID) </P> <P>&nbsp;</P> <P>为何 前一句 where子句利用不到索引?</P> <P>&nbsp;</P>
阿福的主页 阿福 | 菜鸟二级 | 园豆:250
提问于:2008-07-30 15:14
< >
分享
其他回答(6)
0
怎么还是暂放首页?
dudu | 园豆:31075 (高人七级) | 2008-07-30 15:22
0
也许 or @CustomerID is null 会使你的索引无效吧
_Zerg | 园豆:455 (菜鸟二级) | 2008-07-30 17:01
0
不是这样写的啊(好像是这样的哦~你试下~~) select a.* from opvoucher a WHERE a.customercode = @CustomerID or a.customercode =@CustomerID is null
like%'远远'% | 园豆:635 (小虾三级) | 2008-07-30 20:32
0
Mark
Ritchie(乞戈) | 园豆:230 (菜鸟二级) | 2008-07-30 22:15
0
负向查询(not)和or操作属于非sarg操作,不会使用索引,所以前一句用不上索引 建议查询时尽量避免负向查询和OR操作 对于你这种情况,其实拆成两个语句比较好,如果@CustomerID==null,就把where条件去掉 这一点确实是sql server比较傻,发现OR就产即废弃了索引,根本就没看后面一个条件是不是索引有关
丁学 | 园豆:18730 (专家六级) | 2008-07-31 07:26
0
select a.* from opvoucher a WHERE (a.customercode = isnull(@CustomerID,'00000000-0000-00000000-000000000000')) 不过这个条件实在没有必要写在select的条件中呀,可以在select之前处理一下。
玉开 | 园豆:8822 (大侠五级) | 2008-07-31 09:25
0
@CustomerID is null 这样的写法有用? 如果@CustomerID真的是NULL的话,会怎样?岂不是全选出来了?因为WHERE字句对于任何记录来说都为TRUE…… 也就是说,第一条SQL先别说什么索引了,本身就是错的!
电机拖动 | 园豆:1295 (小虾三级) | 2008-08-03 17:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册