2017-10-16 84 views
-1

(我将简化...)如何提高我的查询速度大表中的SQL Server

与45M记录的一种表,其日益增加。

每天晚上,我必须从一为nvarchar(最大)字段

替换一张表中,我不得不删除HTML,CSS标签,也从日期时间字段转换格林尼治标准时间UTC(8)。

我与标量函数测试,但它很慢,需要花费很长时间....

这是做的最好的方法(在性能方面)? 我不需要SQL查询,只是为了解释方式/方法...

谢谢!

精密: 我不得不从商业产品中提取过夜45M记录(我没有在软件控制)和另一个SQL Server上的重定向DATAS我们的“家”数据库...

我试过很多方法,比如... SQL - Remove all HTML tags in a string

Convert Datetime column from UTC to local time in select statement

,但它真的很慢...

+0

性能方面的最佳方法是在插入数据之前清理数据,这样您就不必每晚擦洗它。 –

+0

哇!我完全使用“stackoverflow”来避免这种答案...我必须使用商业产品...我们必须提取数据并在Excel中生成报告... – navya

+1

那么您期望什么?这非常含糊,我们无法提供答案。可以说,你还没有真正问过一个问题。看来你需要一些帮助,但没有细节,我们不能为你提供任何方向。 –

回答

0

标量函数会杀了你。特别是在处理数百万条记录时。请注意这篇文章:https://www.sqlservercentral.com/Forums/Topic1338291-203-1.aspx尝试使用内联表值函数(请注意同一篇文章)。

您可能也会从并行查询中受益。这是一个documented method这样做。只有在查询中不使用标量udf时,才能使查询平行。

剥离标记和CSS(假设它在html头文件中定义)的最简单方法是使用SQLXML方法。这是一个examaple,它可以帮助你开始。

declare @somehtml nvarchar(max) = 
'<html> 
    <head> 
    <title>A Web Page</title> 

    <style> 
    body {background-color: powderblue;} 
    h1 {color: blue;} 
    p {color: red;} 
    </style> 

    </head> 

    <body> 
    <h1>News Flash</h1> 
    <p>We lulled LA into a false sense of security.</p> 
    <p>0-2 means nothing. The Cubs will win. </p> 
    </body> 
</html>' 

declare @cleaned nvarchar(max) =''; 

select @cleaned += z.xx.value('.', 'nvarchar(max)')+char(10) 
from (values (cast(@somehtml as xml))) x(xx) 
cross apply xx.nodes('/html/body/node()') z(xx); 

print @cleaned; 

返回:

快讯

我们麻痹LA到安全的错觉。

0-2意味着什么。

小熊队将赢。

+1

真的很感谢!这就是我所希望的 - 我的声誉太低,无法投票给您的答案......坦克再次! – navya