0
我有三個表,wp_posts(60000記錄),wp_postmeta(130000記錄)和news_news_obj(70000記錄)。 我想從wp_posts表中找到news_news_obj表中缺少的所有帖子。 與news_news_obj.id進行比較,每個帖子在wp_postmeta表(oldpostid)中都有一個自定義字段。與大表和連接MySQL性能問題
我試着用下面的2個查詢先用限制30,而用NOT IN的那個與加入的一個比較快。 問題是,當我刪除LIMIT查詢需要太長的時間..我試着離開它幾個小時,它沒有返回任何結果。
我能爲這類問題和大數據做些什麼?
任何幫助表示讚賞!
與第一個查詢聯接:
SELECT meta2.id, meta2.title, meta2.main_text
FROM wp_posts
INNER JOIN wp_postmeta meta1 ON meta1.post_id = wp_posts.ID
AND meta1.meta_key = 'oldpostid'
AND wp_posts.post_type = 'post'
RIGHT JOIN news_news_obj meta2 ON meta1.meta_value = meta2.id
WHERE meta1.meta_value IS NULL
我試過第二個查詢NOT IN:
SELECT news_news_obj.id, news_news_obj.title, news_news_obj.main_text
FROM news_news_obj
WHERE news_news_obj.id NOT IN (
SELECT wp_postmeta.meta_value
FROM wp_posts, wp_postmeta
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = 'oldpostid'
AND wp_postmeta.meta_value = news_news_obj.id
AND wp_posts.post_status = 'publish'
AND wp_posts.post_type = 'post'
)
是否有理由第二個查詢關心'發佈',第一個不是?另外,考慮到表格的大小,我並不積極;但從第二個版本的子查詢中取出'AND wp_postmeta.meta_value = news_news_obj.id'可能會有所幫助(因爲它不再是相關的子查詢,所以mysql可以爲每個外部行處理子查詢一次)。 – Uueerdo
否沒有理由,我只是忘了將它添加到第一個查詢。現在我主要關心的是在合理的時間限制內,只要得到結果就可以完成其中一項查詢。 – Nikos
因爲這是我檢查的部分,如果帖子存在於第二個表格中,您是否有任何想法,如果我刪除此部分,如何以不同的方式完成? – Nikos