字符串连接后索引被破坏

zerg2001 2016-04-13 10:45:31
create view V1 as
select NID,VName,VNum from Tb1
union all
Select NID+'A' as NID,,VName,VNum from Tb2
go

其中Tb1和Tb2都是用NID(VARCHAR50)作为聚焦唯一索引的表,
执行
select * from V1 where NID='14010101'
后,执行时间需要5秒。
将Tb2的NID+'A"改为NID,则0秒执行。
这个视图要如何写才能让索引正常起作用?
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2016-04-13
  • 打赏
  • 举报
回复
"将Tb2的NID+'A"改为NID"后, 视图的逻辑已与原先视图不同了, 2个逻辑不同的视图之间比较性能没什么意义喔.
spiritofdragon 2016-04-13
  • 打赏
  • 举报
回复
这就牵扯出视图的缺点了。这种时候,就不要用视图。直接拼SQL语句执行。 你拼成这样:

declare @s varchar(50)='14010101';
select NID,VName,VNum from Tb1 where NID =@s
union all
Select NID+'A' as NID,,VName,VNum from Tb2 where NID =stuff(@s,len(@s),1,'') and right(@s,1)='A'
这样两个从句都能用索引了。 希望能看明白第二句

34,590

社区成员

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

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