欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql语句的优化,速度很慢,求其他方法实现,该怎么解决

更新时间: 2014-01-05 02:18:12 责任编辑: Author_N1

 

SQL语句的优化,速度很慢,求其他方法实现
我有表a 数据为

id   name
1    1002
2    1003
3    1004

表B 数据为

id  namestr
1   1002|1005|
2   1004|
3   1008|

最后我想得出结构

id   name   flag
1    1002   1
2    1003   0
3    1004   1

简单的说,就是A表中的一个字段NAME 在B表中出现过就输出FLAG=1

我试着用标量值函数来写是可以,数据少可以,但是数据多就很慢了,有什么别的方法吗?
--参考方法--

--drop table A
--drop table B

create table a(id  int,  name varchar(20))

insert into A
select 1   , '1002'
union all select 2  ,  '1003'
union all select 3  ,  '1004'

create table b(id  int,  namestr varchar(30))

insert into b
select 1  , '1002
--参考方法--
1005
--参考方法--
'
union all select 2  ,  '1004
--参考方法--
'
union all select 3  ,  '1008
--参考方法--
'


select id,
       name,
       case when  exists 
  (
select 1
from b
where charindex('
--参考方法--
'+a.name+'
--参考方法--
','
--参考方法--
'+b.namestr) > 0
  )
  then 1
        else 0
   end as flag
from a
/*
id name flag
1 1002 1
2 1003 0
3 1004 1
*/

--参考方法--

WITH a(id,NAME) AS
(
SELECT 1,'1002' UNION ALL
SELECT 2,'1003' UNION ALL
SELECT 3,'1004'
)
,b (id,namestr) AS
(
SELECT 1,'1002
--参考方法--
1005
--参考方法--
' UNION ALL
SELECT 2,'1004
--参考方法--
' UNION ALL
SELECT 3,'1008
--参考方法--
'
)
,c AS
(
SELECT (SELECT RTRIM(namestr) AS [text()] FROM b FOR XML PATH('')) namestr
)
SELECT a.*,CASE WHEN CHARINDEX(a.NAME,c.namestr)>0 THEN 1 ELSE 0 END flag
FROM a,c

--参考方法--
引用:
Quote: 引用:

呵呵,你先试试看,性能怎样


性能不好。很慢


对了 在表名后面加个 with(nolock)试试,比如:

a with(nolock)
b with(nolock)

防止阻塞问题。
--参考方法--
再试试函数版本的:




--1.函数
if exists(select * from sys.objects where name = 'f_splitSTR' and type = 'tf')
   drop function dbo.f_splitSTR
go

create function dbo.f_splitSTR
(
@s varchar(8000),     --要分拆的字符串
@split varchar(10)    --分隔字符

returns @re table(                      --要返回的临时表
                     col varchar(1000)  --临时表中的列 
                 )
as
begin   
  declare @len int
  
  set @len = LEN(@split)      --分隔符不一定就是一个字符,可能是2个字符
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:12
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8237/
本文WWW.DOC100.NET DOC100.NET版权所有。