MySQL - UPDATE +查询优化

时间:2013-01-15 12:09:59

标签: mysql database indexing

我有一个最优化问题。我还没有真正进入MySQL索引。我读了一些文章和问题,但我找不到我要找的东西。

我在一个有近100万行的表上有一个带有WHERE条件的UPDATE语句。

我想加快这个UPDATE操作。我认为大部分时间都花在寻找WHERE中指定的记录上。

我的查询看起来像这样,有不同的网址:

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

网址是唯一的。目前,有一个AUTO INREMENT id字段被定义为PRIMARY KEY。我不需要任何<,>或BETWEEN操作 - 所以也许我可以使用一些哈希?

我应该使用什么引擎和索引来获得最佳性能?

我的一位朋友建议在url字段上使用InnoDB + UNIQUE。还有什么我可以做的吗? 这个UPDATE运行了很多次 - 每天大约1 000 000次,大多数执行都会导致更新 - 大约95%。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

  

我的一位朋友建议在url字段上使用InnoDB + UNIQUE。还有什么我可以做的吗?这个UPDATE运行了很多次 - 每天大约1 000 000次,大多数执行都会导致更新 - 大约95%。

你的朋友是对的。

有一点是URL可能很长,InnoDB上索引键的最大可能长度为767个字节。

因此,您最好对网址进行哈希处理(例如,使用MD5)并在包含网址哈希的字段上创建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')