【问题标题】:Make 10k queries SQL faster使 10k 查询 SQL 更快
【发布时间】:2020-04-21 06:13:05
【问题描述】:

我正在尝试从 Python 对 mysql 服务器执行超过 10k 次查询,这是我准备好的查询语句

UPDATE `rates` 
SET `in`=%s, `out`=%s, `amount`=%s, `minamount`=%s, `maxamount`=%s 
WHERE `from`='EXMRUB' AND `to`='YAMRUB' AND `id_site`= 1

问题是它运行速度非常慢,我的意思是执行 10k 更新大约需要 5 分钟,我该如何修改我的查询以使其更快?

【问题讨论】:

  • 你有索引吗?
  • 您可以尝试在WHERE 子句中出现的三列的组合上添加索引。不能保证 MySQL 在更新时会使用这个索引。

标签: mysql sql


【解决方案1】:

假设id_site 是您表的主键,您可以将use a little MySQL trickexecutemany 结合使用以加快更新速度:

INSERT INTO rates (id_site, `in`, `out`, amount, minamount, maxamount)
    VALUES (%s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
    `in`=VALUES(`in`)
,   `out`=VALUES(`out`)
,   amount=VALUES(amount)
,   minamount=VALUES(minamount)
,   maxamount=VALUES(maxamount);

executemany 非常重要,因为它确保循环不会在客户端完成。

【讨论】:

    【解决方案2】:

    您可以使用(``from``, ``to``, ``id_site``) 上的索引来加速每个单独的查询。

    但是,您最好将数据加载到数据库中的单独表中,然后使用 join 在单个语句中进行更新。

    【讨论】:

    • 我真的不明白 JOIN 和 INNER,所以如果你在我的查询中展示一个小例子,那就太好了
    • 另外:请不要使用FROMTO等关键字命名您的列
    猜你喜欢
    • 2021-07-25
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-06-04
    相关资源
    最近更新 更多