2009-11-20 32 views
0
上的簡單更新

我正在運行以下查詢存儲過程中,它需要30毫秒執行。誰能幫我優化這個查詢:優化表

表定義是:

Create Table Customer 
(
    CustID int not null auto_increment, 
    CustProdID int, 
    TimeStamp DateTime, 
    primary key(CustID) 
); 

Update Customer 
Set TimeStamp = InputTimeStamp (stored procedure's Input) 
Where CustID = InputCustID (stored procedure's Input) 
and CustProdID = InputCustProdID; (stored procedure's Input); 

而且除了主索引這個表有custprodID列簡單索引。

在此先感謝。 問候, 瑪納斯

+0

對於所有問題的答案我已經在更新開始之前和完成Updation之前在我的存儲過程中放入了調試語句的時間戳記。 正如我前面提到的,這些列有索引。 – 2009-11-20 12:23:58

回答

0

我不知道有多少真,同時保持相同的功能,你可以在這裏改變;這是一個非常基本的查詢。

0

我的猜測是時間不在存儲過程中,而是在調用它的代碼中(加上網絡開銷等)。

+0

這是我從mysql命令行調用過程的時間 – 2009-11-20 12:25:01

+1

使用您的應用將使用的相同代碼運行一百萬次。這將爲您估計需要多長時間提供良好的基礎。 – 2009-11-20 15:04:08

1

你怎麼測量30ms?如果通過運行一次程序,結果將會被運行測試的開銷所淹沒。把它放在一個循環中,做1000次,然後將結果除以1000,那麼你會得到什麼?

0

當你說30毫秒時,cpu時間還是整體性能時間?你知道有多少條記錄正在更新(我猜根據這個例子一個小數字,但不確定)。此外,表是否有觸發器,所以更多的工作正在完成比滿足眼睛...

我同意,這是一個簡單的查詢,所以沒有太多優化它。您可能想要在兩個字段上放置聚簇索引,但我不知道這對您的應用程序是否合適。

0

您可以嘗試使用(CustID,CustProdId)上最左側的前綴索引。