如何在 Sql 服务器中编写此查询以获得更好的性能?删除子字符串行
How to write this query for better performance in Sql Server? Removing SubString rows
如何编写此查询以获得更好的性能?
SELECT T1.flow
FROM #allflows T1 INNER JOIN
#allflows T2
ON t2.flow like t1.flow + '%'
在这种情况下,您可以通过在加入之前仅选择必要的列来优化查询
SELECT T1.flow FROM #allflows T1
INNER JOIN (SELECT flow from #allflows) T2 ON t2.flow like t1.flow + '%'
我通过查询示例客户table、30,000 行
创建了自己的代表“#allflows”
这是我得到的
Declare @s as datetime = getdate();
CREATE NONCLUSTERED INDEX ix_tempNCIndexAft ON #allflows (flow);
SELECT 'make index', DATEDIff(second,@s, getdate())
SET @s = getdate();
SELECT t1.flow,COUNT(DISTINCT t2.flow) cnt INTO #realflows FROM #allflows t1
INNER JOIN #allflows t2 ON t2.flow like t1.flow+ '%' GROUP BY t1.flow HAVING COUNT(DISTINCT t2.flow) = 1;
SELECT 'your query', DATEDIff(second,@s, getdate())
select * from #realflows ;
我不明白你为什么要重复,所以你可以这样做:
select t1.flow
from #allflows t1
where t1.flow is not null;
为什么?那么 t1.flow
将匹配 like t1.flow + '%'
.
当然,如果您想要重复项,则查询成本更高。
我猜这不一定能回答您的问题。您应该问 另一个 问题,并提供适当的示例数据、所需结果以及对您想要做什么的解释。
如何编写此查询以获得更好的性能?
SELECT T1.flow
FROM #allflows T1 INNER JOIN
#allflows T2
ON t2.flow like t1.flow + '%'
在这种情况下,您可以通过在加入之前仅选择必要的列来优化查询
SELECT T1.flow FROM #allflows T1
INNER JOIN (SELECT flow from #allflows) T2 ON t2.flow like t1.flow + '%'
我通过查询示例客户table、30,000 行
创建了自己的代表“#allflows”这是我得到的
Declare @s as datetime = getdate();
CREATE NONCLUSTERED INDEX ix_tempNCIndexAft ON #allflows (flow);
SELECT 'make index', DATEDIff(second,@s, getdate())
SET @s = getdate();
SELECT t1.flow,COUNT(DISTINCT t2.flow) cnt INTO #realflows FROM #allflows t1
INNER JOIN #allflows t2 ON t2.flow like t1.flow+ '%' GROUP BY t1.flow HAVING COUNT(DISTINCT t2.flow) = 1;
SELECT 'your query', DATEDIff(second,@s, getdate())
select * from #realflows ;
我不明白你为什么要重复,所以你可以这样做:
select t1.flow
from #allflows t1
where t1.flow is not null;
为什么?那么 t1.flow
将匹配 like t1.flow + '%'
.
当然,如果您想要重复项,则查询成本更高。
我猜这不一定能回答您的问题。您应该问 另一个 问题,并提供适当的示例数据、所需结果以及对您想要做什么的解释。