首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL和PHP优化多行的更新查询

如何使用MySQL和PHP优化多行的更新查询
EN

Stack Overflow用户
提问于 2020-04-29 23:14:10
回答 1查看 183关注 0票数 0

我有一个表,其中包含大约80.000条记录。它有4列:

代码语言:javascript
复制
|   id   |  code  |  size |  qty |  
+--------+--------+-------+------+
|    1   |  4735  |   M   |   5  |
|    2   |  8452  |   L   |   2  |
    ...
| 81456  |  9145  |   XS  |   13 |

code列是唯一的。

我必须一天更新两次qty

为此,我使用以下查询:

代码语言:javascript
复制
UPDATE stock SET qty = CASE id 
                         WHEN 1 THEN 10
                         WHEN 2 THEN 8
                         ...
                         WHEN 2500 THEN 20
                       END
              WHERE id IN (1,2,...,2500);

我使用PHP拆分查询,一次更新2500股票。

以下是每个2500股票更新所需的时间(秒):

代码语言:javascript
复制
[0]7.11
[1]11.30
[2]19.86
[3]27.01
[4]36.25
[5]44.21
[6]51.44
[7]61.03
[8]71.53
[9]81.14
[10]89.12
[11]99.99
[12]111.46
[13]121.86
[14]131.19
[15]136.94
[END]137

正如你所看到的,更新2500个产品需要5-9秒,我认为这是很安静的。

我能做些什么来提高速度呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 23:33:45

因为时间似乎越来越长,所以我希望您需要id字段上的索引,因为它看起来像是在进行全表扫描。您可以创建如下所示的索引

代码语言:javascript
复制
CREATE INDEX my_first_index ON table(id);

(我不得不添加这个作为答案,因为我不能发表评论,我知道它更多的是一个评论!!)

**编辑**

我重新读了一遍,发现你的问题更大。我仍然认为在id上建立索引可能会解决这个问题,但更好的解决方案是为id到数量的映射创建一个新的表,我们称之为qty_mapping

代码语言:javascript
复制
|   id   |  qty |  
+--------+------+
|    1   |   10 |
|    2   |   8  |
    ...
| 2500   |   20 |

确保索引id,然后您可以将更新更改为

代码语言:javascript
复制
update stock set qty = (select qm.qty from qty_mapping qm where qm.id = stock.id)

它应该能够在几乎没有时间的情况下更新全部80,000条记录。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61505216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档