我有以下查詢(MySQL)非常慢(約15秒)。我改變了列和表的名字,所以很抱歉,如果它有任何類型的錯誤;原始查詢正在工作,只保留這個概念,沒有字面查詢。兩個表之間的SQL查詢效率
SELECT
id,
b,
(SELECT MAX(day)
FROM all_days
WHERE all_days.id = X.id
) AS day
FROM X
請注意,all_days有超過200萬行。我有3個索引:一個用於id,其他用於一天,另一個用於{id,day}
但是,如果我用UNION將查詢分爲N個查詢,則只需約1秒鐘或更少時間,結果相同:
<?php
$ids = getIds(); // get all ID from X with a query
$i = 0
foreach ($ids as $id) {
if ($i++ > 0) {
$query .= " UNION ";
}
$query .= "SELECT MAX(day)
FROM all_days
WHERE all_days.id = $id";
}
?>
任何想法,我怎麼能提高速度而不做聯盟?
編輯(添加結構):
Table X:
id INTEGER PRIMARY KEY
b INTEGER -- extra info
Table all_days:
day_id INTEGER PRIMARY KEY
id INTEGER FK X.id
day DATETIME
all_days indexes:
id
day
id,day
它是不是從你清楚問題 - 有'all_days.id'上的索引嗎? – Turophile
請發佈您的表格定義和用於完成信息的索引 – Dubas
謝謝您的意見。我已經添加了結構。 – kanashin