Sql-Server

使用 sqlcmd 時的查詢性能

  • September 19, 2012

可能重複:

使用 SQLCMD 執行查詢與使用 SSMS 執行查詢

我有許多腳本可以查詢來自不同表的數據並因此更新它們。我已經定義了一個批處理文件並在 sqlcmd 命令中執行它們。似乎當我直接在 SQL 管理工作室中執行這些腳本時,它們的執行速度比從批處理文件中呼叫它們時要快。

這種行為有什麼原因嗎?

提前致謝。

下面是我為加快使用 SQLCMD 執行腳本所做的工作,這是閱讀 AmmaR 推薦給我的好文章的結果:

對於每個腳本,我都添加了OPTION (RECOMPILE),因此 SQL 不需要有查詢計劃,它每次都在編譯和執行腳本。當我們在腳本中使用變數時,這一點尤其重要。SQL 直到執行時才知道這些變數。例如,在下面的程式碼中,randomId 是根據 RAND() 函式的返回值計算得出的,因此 SQL Server 事先不知道它是什麼。添加OPTION (RECOMPILE)有助於更快地執行此腳本,即使我使用 SQLCMD 執行它也是如此。

`

SET @i = 1

WHILE @i <= @Address_Row_Count 
BEGIN
   SELECT @RandomId = ROUND(((@Upper_Town - @Lower -1) * RAND() + @Lower), 0)

   UPDATE a
   SET 
       a.TownOrCity = 
                   (
                       SELECT 
                           Town   
                       FROM 
                           @TownTble aa 
                       WHERE 
                           aa.Id = @RandomId
                   ) 
   FROM 
       Addresses a
   WHERE
       a.Id = @i
       AND a.PersonId IS NOT NULL OPTION (RECOMPILE)

   SET @i = @i + 1
END `

謝謝你的幫助!

引用自:https://dba.stackexchange.com/questions/24400