【问题标题】:MySQL - UPDATE + Query optimalizationMySQL - UPDATE + 查询优化
【发布时间】:2013-01-15 12:09:59
【问题描述】:

我遇到了优化问题。我还没有真正进入 MySQL 索引。我阅读了一些文章和问题,但没有找到我想要的。

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

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

我的查询看起来像这样,具有不同的 URL:

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: mysql database indexing


    【解决方案1】:

    我的一个朋友建议在 url 字段上使用 InnoDB + UNIQUE。还有什么我可以做的吗?这个 UPDATE 运行了很多次 - 每天大约 1 000 000 次,大多数执行导致更新 - 大约 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')
    

    【讨论】:

      猜你喜欢
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2011-07-07
      • 2018-12-21
      相关资源
      最近更新 更多