@V1 in ('',ID001) 是语句中的条件之一。
ID001是表的主键列,唯一且聚焦。
如果条件改用@V1=ID001的话,耗用开销为13%,用时为0秒;
用@V1 in ('',ID001) 的话,开销为83%,用时为43秒。
事实上@v1做为主键,是不可能为空字符,但语句内嵌在应用程序中,无法改变。
有没有办法从数据库端做优化处理?
------解决方案--------------------
你如果不能修改这种嵌入式写法,数据库端也做不了什么
------解决方案--------------------
这不是要优化,而是要开锁匠,臣妾做不到啊!
------解决方案--------------------
向楼主跪了。。
总感觉别扭。
列名在左 边,变量在右边 不好吗?
你那样我感觉好怪啊。
你程序写的那种语句,用了聚集索引扫描。
语句不能改,不好弄啊。
declare @V1 varchar(50)
set @V1='133675480'
SELECT * FROM UserInfo t WHERE @V1 in ('',t.UserID) --聚集索引扫描
SELECT * FROM UserInfo t WHERE @V1 in (t.UserID) --聚集索引查找
SELECT * FROM UserInfo t WHERE t.UserID in(@V1,'') --聚集索引查找
SELECT * FROM UserInfo t WHERE t.UserID=@V1 --聚集索引查找