首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用2个selects优化SQL查询

使用2个selects优化SQL查询
EN

Stack Overflow用户
提问于 2019-04-14 22:24:37
回答 1查看 38关注 0票数 1

我正在尝试使用基于user.id的最小used_time (datetime)更新单个campaign.id,但以下代码需要大约5秒才能执行。反向链接表包含一百万行。

代码语言:javascript
复制
UPDATE `backlinks` 
SET
`backlinks`.`crawler_id` = 'test', 
`backlinks`.`used_time`=NOW() 
WHERE
`backlinks`.`campaign_id`=(
SELECT `id` FROM `campaigns` 
WHERE `campaigns`.`completed`=false 
AND `campaigns`.`status`=true 
GROUP BY `campaigns`.`user_id` 
ORDER BY `campaigns`.`used_time` ASC 
limit 1
)
AND `backlinks`.`googlebot_id` IS NULL 
AND `backlinks`.`used_time` IS NULL 
LIMIT 1;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-14 22:32:45

您可以尝试使用子查询使用JOIN执行UPDATE

代码语言:javascript
复制
UPDATE `backlinks` b
JOIN (
    SELECT c.id
    FROM campaigns c
    WHERE exists (
        SELECT 1 
        FROM campaigns cc
        WHERE c.user_id = cc.user_id
        GROUP BY cc.user_id
        HAVING min(cc.used_time) = c.used_time
    )
) t1 on b.`campaign_id` = t1.id
SET
    b.`crawler_id` = 'test', 
    b.`used_time`=NOW() 
WHERE 
    b.`googlebot_id` IS NULL 
AND 
    b.`used_time` IS NULL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55676338

复制
相关文章

相似问题

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