如何在 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 + '%'.

当然,如果您想要重复项,则查询成本更高。

我猜这不一定能回答您的问题。您应该问 另一个 问题,并提供适当的示例数据、所需结果以及对您想要做什么的解释。