gpt4 book ai didi

mysql - 加速大表上的简单 UPDATE 查询

转载 作者:行者123 更新时间:2023-11-29 11:57:02 24 4
gpt4 key购买 nike

这是我的表格:

+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| CLID | int(11) | NO | MUL | NULL | |
| calldate | datetime | YES | MUL | NULL | |
| src | varchar(20) | YES | | NULL | |
| dst | varchar(20) | YES | | NULL | |
| billsec | varchar(10) | YES | | NULL | |
| duration | time | YES | | NULL | |
| debt | float | YES | MUL | NULL | |
| region | varchar(255) | YES | | NULL | |
| uniqueid | varchar(20) | NO | PRI | NULL | |
+----------+--------------+------+-----+---------+-------+

它有超过 490,328 条记录。我必须更新该表中的每一条记录。这是查询(我在 PHP 中使用 mysqli):

UPDATE `All` 
SET `debt` = '$debt', `region` = '$region'
WHERE `uniqueid` = $uid;

不幸的是,执行单个查询大约需要 1.4519529342651 秒。有什么办法可以加快速度吗?

最佳答案

1.45秒更新一条记录是非常糟糕的性能,并且非常出乎意料。您的查询打算使用主键更新单行。您不应该注意到时间的长短。

但是,由于条件的表达方式,引擎无法为此查询使用主键索引。让我们更详细地看看该查询:

UPDATE `All` 
SET `debt` = '$debt', `region` = '$region'
WHERE `uniqueid` = $uid;
-------------------^

除非$uid 在值中包含引号,否则它会被视为字符串以外的内容。因此,如果您传入“1”,那么与字符串相比,您将得到一个整数。这可以防止使用索引。哎呀。

我的第一个建议是使用参数来修复您的查询。除此之外,请将单引号放入:

UPDATE `All` 
SET `debt` = '$debt', `region` = '$region'
WHERE `uniqueid` = ''$uid'';

如果 uniqueid 实际上看起来像一个数字,请考虑将其存储为数字而不是字符串。

当然,其他事情也可能出错,例如:

  • 其他查询可能会锁定表。
  • 您可以在冷启动时测试查询,并且所有后续查询都将非常快。
  • 该表的触发器可能非常慢。

关于mysql - 加速大表上的简单 UPDATE 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33042543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com