0

クエリ 1:

SELECT  a.name,a.id
FROM name_list AS a 
WHERE   a.created_time BETWEEN "2013-03-14 00:00:00" AND "2013-03-14 23:59:59"

クエリ 2:

SELECT address_nr
FROM address_list
WHERE user_id="1117770"
LIMIT 1

クエリ 1 と 2 を実行するには、両方とも 0.003 秒しか必要ありません。しかし、以下のように、それらを組み合わせて2番目のクエリをサブクエリとして作成すると:

SELECT  a.name,a.id,(SELECT address_nr FROM address_list WHERE user_id=a.id LIMIT 1) as 'address'
    FROM name_list AS a 
    WHERE   a.created_time BETWEEN "2013-03-14 00:00:00" AND "2013-03-14 23:59:59"

実行するのに1秒かかります。何千ものデータを取得しているとき、1000 秒かかりました。

誰かがこれで私を案内してもらえますか? ありがとう!

4

1 に答える 1

2

サブクエリを使用する代わりに、結合を試してください。これは著しく速くなるはずです:

SELECT a.name,a.id,b.address_nr address
    FROM name_list a
    LEFT JOIN address_list b ON a.id=b.user_id
    WHERE a.created_time BETWEEN "2013-03-14 00:00:00" AND "2013-03-14 23:59:59"

サブクエリに時間がかかる理由は、2 つのクエリを実行するだけでなく、1 つのメイン クエリと、メイン クエリの結果セットのすべての行に対してサブクエリを実行しているためです。テーブル a に 1000 行ある場合、1001 個のクエリを実行しています。

于 2013-03-14T04:56:37.200 に答える