2017-10-16 63 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