如何提高我的查询速度大表中的SQL Server
(我将简化...)如何提高我的查询速度大表中的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
,但它真的很慢...
标量函数会杀了你。特别是在处理数百万条记录时。请注意这篇文章: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意味着什么。
小熊队将赢。
真的很感谢!这就是我所希望的 - 我的声誉太低,无法投票给您的答案......坦克再次! – navya
性能方面的最佳方法是在插入数据之前清理数据,这样您就不必每晚擦洗它。 –
哇!我完全使用“stackoverflow”来避免这种答案...我必须使用商业产品...我们必须提取数据并在Excel中生成报告... – navya
那么您期望什么?这非常含糊,我们无法提供答案。可以说,你还没有真正问过一个问题。看来你需要一些帮助,但没有细节,我们不能为你提供任何方向。 –