0
當我用LEFT JOIN
運行我的查詢時,它需要20秒。當我將它分成2個查詢時,它會在4秒內運行。但是,如您所想,這使得以特定順序顯示結果變得非常困難。 我最初的查詢有什麼問題,我可以將2合併爲1嗎?MySQL左連接運行速度非常慢,分裂成2個查詢要快得多
Table1
有〜400,000行,而表2有〜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
第一個查詢:
你試過,而不是使用? – 2013-03-14 18:52:39
@raheelshan是的,沒有什麼區別。 – 2013-03-14 18:53:33
table1是否被'Field1'索引? – danihp 2013-03-14 18:59:22