を使用してクエリを実行すると、LEFT JOIN
20 秒かかります。2 つのクエリに分割すると、4 秒で実行されます。ただし、ご想像のとおり、これにより結果を特定の順序で表示することが非常に難しくなります。最初のクエリの何が問題なのですか? 2 つを 1 つに結合できますか?
Table1
〜400,000行あり、Table2には〜200,000行あります。
Field3
は の主キーでTable2
あり、 で索引付けされていTable1
ます。
クエリは約 10 万行を返します。
SELECT Table1.Field1, Table2.Field4
FROM
Table1
LEFT JOIN
Table2 USING (Field3)
WHERE Table1.Field1 = 'Example'
書かれているとおりにクエリを実行すると、実行に平均 20 秒かかります。しかし、 なしでクエリを実行LEFT JOIN
し、そのデータを取得するために 2 番目のクエリを実行すると、合計で約 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
、最初のクエリから: