我将提出我提出的其他问题,因为问题不同。我有两张桌子:
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;
这有帮助,但它不起作用。也许我必须改变我的策略并尝试其他类型的查询而不使用左连接。
答案 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
答案 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条记录