2011-06-30 160 views
4

我有一個2350萬行和20列的表。我更新了表格,將其中一列設置爲null。這個查詢花了一個小時才完成。當然,我沒有一個驚人的快速數據庫服務器,但是這個更新時間正常嗎?我運行更新時沒有索引。這會有多大幫助?長查詢時間

在此先感謝!

+0

如果您正在更新所有行,那麼我並不感到震驚。 看看索引你的表(如果它不是),以幫助你的速度。 – Limey

+0

@limney索引沒有幫助,因爲我在我的答案中說。 – diracdeltafunk

+0

@Limey索引會使插入/更新更慢 – Magnus

回答

3

考慮到它更新了所有行,索引不會有任何幫助。

有讀取在同一時間嗎?更新會導致行級別鎖定,即使很短暫,也會導致大量流量並在事務日誌中等待。

+0

數據庫中沒有其他事情發生。 – divided

+0

ID列上的唯一索引是否有幫助? – divided

+0

nope,如果你沒有'WHERE',它只是做一個全表掃描/更新,這就是它需要更新2300萬條記錄 – Rodolfo

3

對於您的數據庫服務器的行數,這當然是一個可以接受的時間,尤其是因爲您認爲這並不是那麼快。如果你有一個索引,它不會有幫助。索引用於幫助數據庫服務器更快地找到特定的記錄。

+0

謝謝,我想這可能是一個非常正常的時間。 – divided

0

而不是更新並將列設置爲空,您可以刪除列並重新添加它爲可空。根據我的經驗,這比更新並將每行設置爲在該字段中爲空快許多倍。