0
我有以下的MySQL查詢需要大約3分鐘運行。它確實有2個子查詢,但表中的行數很少。在做解釋時,看起來「使用臨時」可能是罪魁禍首。顯然,它看起來像數據庫正在爲所有三個查詢創建一個臨時表,如下面的「使用臨時」標記所述。mysql使用臨時表與子查詢,但不是按組和按
讓我感到困惑的是,MySQL文檔說,使用臨時數據通常是由group by和order by引起的,我都沒有使用它。子查詢是否導致一個隱含的組或按順序?子查詢是否導致臨時表是必要的,而不管是否按順序排序?有關如何重構此查詢的任何建議,以便MySQL可以更有效地處理它? MySQL設置中的任何其他調整想法?
mysql> explain
SELECT DISTINCT COMPANY_ID, COMPANY_NAME
FROM COMPANY
WHERE ID IN (SELECT DISTINCT ID FROM CAMPAIGN WHERE CAMPAIGN_ID IN (SELECT
DISTINCT CAMPAIGN_ID FROM AD
WHERE ID=10 AND (AD_STATUS='R' OR AD_STATUS='T'))
AND (STATUS_CODE='L' OR STATUS_CODE='A' OR STATUS_CODE='C'));
+----+--------------------+----------+------+---------------+------+---------+------+------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+----------+------+---------------+------+---------+------+------+------------------------------+
| 1 | PRIMARY | COMPANY | ALL | NULL | NULL | NULL | NULL | 1207 | Using where; Using temporary |
| 2 | DEPENDENT SUBQUERY | CAMPAIGN | ALL | NULL | NULL | NULL | NULL | 880 | Using where; Using temporary |
| 3 | DEPENDENT SUBQUERY | AD | ALL | NULL | NULL | NULL | NULL | 264 | Using where; Using temporary |
+----+--------------------+----------+------+---------------+------+---------+------+------+------------------------------+
謝謝! 菲爾
非常感謝。以這種方式接近查詢完全解決了延遲問題。很驚訝,我沒有想到這個查詢寫得有多笨拙。 –