当我使用 a 运行查询时LEFT JOIN
,需要 20 秒。当我将它分成 2 个查询时,它会在 4 秒内运行。但是,正如您可以想象的那样,这使得以特定顺序显示结果变得非常困难。我的初始查询有什么问题,我可以将 2 合并为 1 吗?
Table1
有 ~400,000 行,Table2 有 ~200,000 行。
Field3
是 中的主键Table2
,并在 中建立索引Table1
。
查询返回大约 ~100k 行。
SELECT Table1.Field1, Table2.Field4
FROM
Table1
LEFT JOIN
Table2 USING (Field3)
WHERE Table1.Field1 = 'Example'
当我按照书面方式运行查询时,平均需要 20 秒才能运行。但是,如果我在没有 的情况下运行查询LEFT JOIN
并运行第二个查询以获取该数据,则所有内容总共运行大约 4 秒。
SELECT Table1.Field1, Table1.Field3
FROM Table1
WHERE Table1.Field1 = 'Example'
//PHP
$first = true;
while ($row = mysql_fetch_assoc($query))
{
if (!$first)
{
$field3Values .= ",";
}
$field3Values .= "'" . mysql_real_escape_string($row['Field3']) . "'";
$first = false;
}
//Now run the 2nd query
SELECT Field4
FROM People
WHERE Field3 IN (" . $field3Values . ")
编辑:根据要求,EXPLAIN
来自第一个查询: