簡體   English   中英

要選擇還是不進行選擇?

[英]To subselect or not to subselect?

我開始熟悉子選擇,但ATM我只是在摸不着頭腦,為什么MySQL在腹股溝中踢自己以下:

SELECT
    id_topic,
    id_member_comment,
    pd.username,
    dt_post
FROM forum_comment c 
LEFT JOIN persondata pd
ON c.id_member_comment = pd.id_member 
WHERE id_comment IN (
    SELECT MAX(last_id_comment) AS id_comment 
    FROM forum_topic
    GROUP BY cat_id
);

如果我分別運行查詢SELECT MAX(last_id_comment) AS id_comment FROM forum_topic GROUP BY cat_id並將結果集替換為id_comment IN (...)部分,則它會立即執行,但是當上述查詢運行時,使用subselect ,需要很長時間才能完成。

優化器逐個遍歷所有注釋(數百萬),而不是先運行子查詢並使用其值? 我在這里錯過了什么?

嘗試將IN作為內聯派生表移動到FROM子句

SELECT 
    id_topic, id_member_comment, pd.username, dt_post
FROM
   (
   SELECT MAX(last_id_comment) AS id_comment
   FROM forum_topic 
   GROUP BY cat_id
   ) AS foo
   JOIN
   forum_comment c ON foo.id_comment = c.id_comment --AND a cat_id join too?
   LEFT JOIN
   persondata pd ON c.id_member_comment = pd.id_member;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM