2010-06-14 77 views
0

是否有人有關於如何提高以下語句的任何建議:執行SELECT語句並插入到同一個表中的最佳方法?

insert into ProductInfo with (rowlock) (orderid, productname) 
     select 66673, FileInfoId 
     from ProductInfo with (nolock) where 
      ProductId = 66671 and 
      IsEligableForCopy = 1 and 
      ProductFileInfoId >= 2768395941 and 
      ProductFileInfoId < 2768405941 
+5

您有什麼問題?它失敗了嗎?它運行速度是否太慢?它是否創建了太多的鎖?它報告錯誤嗎? – MJB 2010-06-14 12:32:48

+0

它有時會返回超時查詢。 – RPS 2010-06-14 12:35:50

+0

@Salil - 不確定重新格式化是否必要。我更喜歡馬克的版本! @RPS - 你對'ProductInfo'有什麼索引?那麼Select會返回多少條記錄? – 2010-06-14 12:38:08

回答

1

它聽起來像是超時了,因爲它無法獲得鎖定。你使用的是什麼DBMS?你有沒有要求鎖試過嗎?您提供的示例似乎是一次性插入,但我認爲這只是一個示例,與您在生產中運行的某些內容相反。

+0

我正在使用SQL 2005,也許我應該刪除rowlock和nolock? – RPS 2010-06-14 12:46:45

+0

我認爲鎖應該是不必要的。 – MJB 2010-06-14 12:54:37

+0

好吧,我會嘗試刪除rowlock和nolock,看看它是否改善。 謝謝! – RPS 2010-06-14 12:56:21

0

查詢看起來不錯。它應該完美運行。有什麼具體的,你想實現。?

1

在ProductInfo上改進或添加標記...也許它不會超時

相關問題