我有以下查询(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