我正在运行一个程序,其中有一个名为mytable的表。该表包含200万条记录。当我运行带参数的过程来过滤并获取数据但过程结果数据在3分钟后返回仅12行。返回的数据很好,但我想知道为什么程序花费的时间超过3分钟。
我的程序:
ALTER Proc [dbo].[ExampleProc]
(@Column1 VARCHAR(MAX)
,@Column2 VARCHAR(MAX)
,@Column3 VARCHAR(MAX)
)
as
Begin
SET NOCOUNT ON;
SELECT ITEM AS column1 INTO #tmpcolumn1 FROM [dbo].[Fn_SplitString](@column1, ',')
SELECT ITEM AS column2 INTO #tmpcolumn2 FROM [dbo].[Fn_SplitString](@column2, ',')
SELECT ITEM AS column3 INTO #tmpcolumn3 FROM [dbo].[Fn_SplitString](@column3, ',')
select column1
,[column2]
,column3
,count(distinct memberid) Membercount
from myTable fact
where EXISTS(SELECT column1 FROM #tmpcolumn1 tmpcol1 where tmpcol1.column1 = fact.column1)
AND EXISTS (SELECT column2 FROM #tmpcolumn2 tmpcol2 where tmpcol2.column2 = fact.column2)
AND EXISTS (select column3 from #tmpcolumn3 tmpcol3 where tmpcol3.column3 = fact.column3)
Group by column1
,column2
,column
,column3
END
我正在使用split函数,如果参数在这里发送,用逗号分隔。在此函数中,它将拆分逗号并将记录作为列插入临时表中。
任何人都可以验证此问题吗?