我在MySQL數據庫中有兩個表。一個表格包含默認值,另一個表格包含覆蓋值和附加值。我編寫了兩個單獨的工作SQL語句來選擇兩者中的所有元素,然後在有覆蓋時替換默認表的值。將兩個工作的SQL語句與UNION結合在一起時所有的mysql都變得無響應
SELECT
d.id AS did, IFNULL(i.id, d.id) AS id, d.parent_id AS parent_id,
IFNULL(i.content, d.content) AS content, d.order_id AS ord
FROM cci d
LEFT JOIN instructions i ON d.order_id = i.order_id
AND i.parent_id = d.parent_id
AND i.specification_id = 'SOME ID'
WHERE d.parent_id = 'SOME PARENT' AND d.specification_id = '1'
UNION ALL SELECT
i.id AS did, i.id AS id, i.parent_id AS parent_id,
i.content AS content, i.order_id AS ord
FROM instructions i
WHERE i.parent_id = 'SOME PARENT'
AND i.specification_id = 'SOME ID'
AND NOT EXISTS (SELECT 1 FROM cci d WHERE d.order_id = i.order_id AND d.parent_id = i.parent_id)
單獨的兩件工作正常,但是當我把它們放在一起MySQL峯值到90%的CPU並凍結了。很明顯,某些工作不正確。什麼會導致這樣的凍結,或者我的聲明有什麼問題嗎?
由於
編輯:
EXPLAIN的輸出是:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
————————————————————————————————————————————————————————————————————————————————————————————————————————
1 | PRIMARY | d | ALL | NULL | NULL | NULL | NULL | 105 | Using where
1 | PRIMARY | i | ALL | NULL | NULL | NULL | NULL | 4 |
2 | UNION | i | ALL | NULL | NULL | NULL | NULL | 4 | Using where
3 | DEPENDENT SUBQUERY | d | ALL | NULL | NULL | NULL | NULL | 105 | Using where
NULL| UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL |
這兩個查詢中的每一個都返回了多少條記錄?你可以爲'UNION'查詢發佈'EXPLAIN'的輸出嗎? – eggyal
我發佈了EXPLAIN的結果。 – Chris
你沒有*表中定義的*索引嗎? – eggyal