2013-01-15 74 views
0

我有一個優化問題。我還沒有真正進入MySQL索引。我讀了一些文章和問題,但我沒有找到我在找什麼。MySQL - 更新+查詢優化

我有一個UPDATE語句的WHERE條件有近100萬行的表上。

我想加快這個UPDATE操作。我認爲大部分時間都是通過查找WHERE中指定的記錄來度過的。

我的查詢是這樣的,有不同的URL:

UPDATE table SET updated = 1, updated_date = now() , [some more fields updated] 
WHERE url = 'someurl.com?id=123532js23'; 

URL是唯一的。目前有一個AUTO INREMENT ID字段被定義爲PRIMARY KEY。我不需要任何<,>或BETWEEN操作 - 所以也許我可以使用一些哈希?

我應該使用哪種引擎和索引以實現最佳性能?

我的一個朋友建議在url字段上使用InnoDB + UNIQUE。還有什麼我可以做的嗎? 這個更新運行真的很多次 - 每天大約1 000 000次,大部分執行結果更新 - 大約95%。

感謝您的幫助!

回答

2

我的一個朋友建議在url字段上使用InnoDB + UNIQUE。還有什麼我可以做的嗎?這個UPDATE運行真的很多次 - 每天大約100萬次,大部分執行結果會更新 - 大約95%。

你的朋友是對的。

有一點是URL可能很長,InnoDB上的索引關鍵字的最大可能長度是767字節。

因此,你最好哈希的URL(比如,與MD5),並創建包含URL的散列領域的UNIQUE指數(當然在WHERE條件下使用):

INSERT 
INTO mytable (url, hashed_url, ...) 
VALUES ('someurl.com?id=123532js23', MD5('someurl.com?id=123532js23')) 

UPDATE mytable 
SET  ... 
WHERE hashed_url = MD5('someurl.com?id=123532js23')