gpt4 book ai didi

mysql - 选择行并在同一查询中更新它们?

转载 作者:行者123 更新时间:2023-11-29 07:40:40 25 4
gpt4 key购买 nike

我通过两个查询在 PHP 和 MySQL 中实现了一个作业队列(与并行运行的多个脚本一起使用):第一个查询使用更新 ID 值更新表中的行,然后第二个查询使用此查询来检索行值(value)。这两个查询在事务内部执行,以防止并行运行的其他脚本检索相同的行。

第一个查询如下所示:

UPDATE products p
SET p.update_id = '550b8d7f3ba477.82670719', p.date_update_started = UTC_TIMESTAMP()
WHERE p.id IN
(
SELECT p2.id
FROM
(
SELECT p3.id
FROM products p3
WHERE p3.date_update_started < UTC_TIMESTAMP() - INTERVAL 1 HOUR # only allow the product processed if not selected for processing recently
AND p3.updated = 1
ORDER BY p3.some_date ASC
) p2
)
LIMIT 100

然后第二个查询将简单地检索具有更新 ID 的行。

在具有 100k 行的表上执行上述查询需要 0.4 秒。性能让我担心,因为随着时间的推移,表将增长到数千万或数亿行。

能否以某种方式更改此查询以使其更加高效?

编辑:存储引擎是InnoDB,表上有22个索引。

最佳答案

这会不会起到同样的作用?

UPDATE products
SET update_id = '550b8d7f3ba477.82670719',
date_update_started = UTC_TIMESTAMP()
WHERE date_update_started < UTC_TIMESTAMP() - INTERVAL 1 HOUR
AND updated = 1
ORDER BY some_date
LIMIT 100

关于mysql - 选择行并在同一查询中更新它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158903/

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