我将扩展我在 SO 中提出的其他问题,因为问题是不同的。我有两个表:
article_cn:
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;
它有帮助,但不起作用。也许我必须改变我的策略并尝试使用其他类型的查询而不是使用左连接。
最佳答案
使用子查询可以实现您想要的(比较两个表中的最后 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 FROMarticle_nl)
来实现,但是请注意,这可能会导致误报,因为它只会检查 article_nl
关于mysql - 限制查询之间的行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46343703/