限制查询之间的行比较

时间:2017-09-21 12:16:27

标签: mysql left-join

我将提出我提出的其他问题,因为问题不同。我有两张桌子:

article_en:

ID  TITLE      CONTENT       HOME_POSITION
1   article1   blablablabla  1
2   article2   blablablabla  2
3   article3   blablablabla  3
4   article4   blablablabla  4
5   article5   blablablabla  5
6   article6   blablablabla  6
7   article7   blablablabla  7

article_nl:

ID  TITLE    CONTENT        ENGLISH_ID  HOME_POSITION
1   article1 blablablabla   5           1
2   article1 blablablabla   7           2

我执行此查询以获取article_en中尚未作为外键添加到article_nl中的最新文章。

SELECT *
FROM article_en
    LEFT JOIN article_nl
        ON article_en.id != article_nl.english_id
ORDER BY article_en.home_position;

这个查询有效,但问题是我在每个表中有超过25.000行,所以查询真的很慢(超过25秒),所以我想限制这个查询来比较两个表之间的最后100篇文章。我的意思是,如果在最后100篇英文文章中有一篇文章在过去的100篇荷兰文章中没有作为外文添加。

我尝试了不同的策略:

SELECT *
FROM article_en
    LEFT JOIN article_nl
        ON article_en.id != article_nl.english_id
ORDER BY article_en.home_position DESC limit 100;

这有帮助,但它不起作用。也许我必须改变我的策略并尝试其他类型的查询而不使用左连接。

2 个答案:

答案 0 :(得分:0)

使用子查询可以实现所需(比较两个表中的最后100个)。

一个例子:

SELECT TOP 100
* FROM
article_en
WHERE article_en.id NOT IN (SELECT english_id FROM article_nl)
ORDER BY home_position

这仍然有点慢,因为你每次都要与article_nl中的所有english_id进行比较,但应该比你正在做的更快。

如果您只想查看article_nl中的100篇最新文章,可以将子查询更改为(SELECT TOP 100 english_id FROM article_nl),但要注意这可能会导致误报,因为它只会检查如果article_nl

的最新100条记录中不存在该ID

答案 1 :(得分:0)

怎么样......

SELECT *
FROM article_en
LEFT JOIN article_nl
ON article_en.id = article_nl.english_id
WHERE article_nl.english_id IS NULL
ORDER BY article_en.home_position;

然后你可以根据需要TOP / LIMIT你的100条记录