我打破了我的頭在一個簡單的子查詢。我有以下查詢巫婆30秒以上運行:mySQL子查詢慢於2個單獨的查詢
SELECT DISTINCT SUBSTRING(6pp, 1, 4) AS postcode
FROM 6pp
WHERE gemeenteID
IN (
SELECT gebiedID
FROM tmp_orderimport
WHERE typeGebied = 'Gemeente'
AND idorder =1733
AND STATUS = TRUE);
解釋:
如果我打破了查詢2個查詢,先運行部分,整個事情的時間花費不超過一個多第二。但我當然更喜歡使用一個查詢。表格在MYISAM。有什麼建議麼?
更新:
以下是Gordon Linoff的例子。我改變了SQL語句:
SELECT DISTINCT SUBSTRING(6pp, 1, 4) AS postcode
FROM `6pp`
WHERE EXISTS (SELECT 1
FROM tmp_orderimport oi
WHERE oi.gebiedID = `6pp`.gemeenteID AND
typeGebied = 'Gemeente' AND idorder = 1733 AND STATUS = TRUE
);
而且在tmp_orderimport添加一個索引(gebiedID,typeGebied,idorder,狀態)。現在查詢運行時間在4秒以下。
新解釋:
對於子查詢,MySQL是**真**不好。嘗試將該語句重寫爲連接(無論如何,這應該是可能的,因爲您正在使用「distinct」)。 –
你可以編輯你的問題與查詢不會比一秒馬? –