2015-06-19 22 views
1
UPDATE `productData`.`productList` 
    SET `dateLastUpdated` = CURDATE(), 
     `totalReviews` = 100 
    WHERE `productList`.`name` = 'FirstchefproUltraSharpDualJuliennePeelerVegetablePeelerStainless'; 

該查詢需要2.93秒,隻影響單行。SQL中的單行UPDATE查詢需要3秒以上的時間

該表是〜75k行長。我沒有太多的SQL經驗,有沒有更好的方法來做到這一點?更新單個行不應該把這個長

我使用的是最新版本的SQL的Ubuntu的服務器

。如果您需要任何詳細信息,只問我會它添加到職位。

感謝

編輯:

我其實不知道,SQL和MySQL,不同的事情。

select語句

SELECT * 
FROM `productList` 
WHERE `productList`.`name` = 'FirstchefproUltraSharpDualJuliennePeelerVegetablePeelerStainless'; 

需要2.88秒,所以我想它的一個問題,我的指數。

編輯:

謝謝你們的幫助

當我嘗試在名稱上創建索引,這樣說:

ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length 

編輯:

切換名稱爲varchar( 64)

現在它快得多

謝謝大家

+0

哪些DBMS您使用的?這看起來像MySQL? –

+1

MySQL <> SQL Server。選擇使用where子句需要多長時間? – Andrew

+0

我不是一個MySQL大師,但我懷疑你沒有該查詢的覆蓋索引,因此它會導致表掃描。 –

回答

0
  1. 創建索引要麼創建於name列的索引(如寫一些評論),或
  2. WHERE語句中使用索引列,例如產品ID如果你的表包含這樣的東西。
-1

`productList`.`name` 
1

對於此查詢:

UPDATE `productData`.`productList` 
    SET `dateLastUpdated` = CURDATE(), 
     `totalReviews` = 100 
    WHERE `productList`.`name` = 'FirstchefproUltraSharpDualJuliennePeelerVegetablePeelerStainless'; 

你想在productList(name)指數:

create index idx_productData_productList on productData(productList); 
+1

爲什麼'productList.name'上的索引不會有好處?這裏'productList'是我相信的表名。 – Rahul

+0

@Rahul。 。 。這是正確的索引。 –