は、次の2つのクエリを考えてみますWHERE追加:句は、クエリが本当に遅い
select a.*, c.*
from account a
join customer c on a.customer_id = c.id
join import i on a.import_id = i.id
join import_bundle ib on i.import_bundle_id = ib.id
と
select a.*, c.*
from account a
join customer c on a.customer_id = c.id
join import i on a.import_id = i.id
join import_bundle ib on i.import_bundle_id = ib.id
where ib.id = 8
最初のクエリが高速であり、二つ目は超遅いです。どんな考え?私はインデックスなどが必要だと思っていますが、インデックスの仕組みは分かりません。私はMySQLを使用しています。
は、ここで私は2番目のクエリにEXPLAIN
をすれば何が起こるかです:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ib const PRIMARY PRIMARY 8 const 1 Using index
1 SIMPLE c ALL PRIMARY 144858
1 SIMPLE a ref fk_account_customer_id,fk_account_import_id fk_account_customer_id 8 mcif.c.id 2
1 SIMPLE i eq_ref PRIMARY,import_bundle_id PRIMARY 8 mcif.a.import_id 1 Using where
私も、それを解釈する方法がわかりません。
編集:
select a.*,
c.*
from account a
join customer c on a.customer_id = c.id
join (select id,
import_bundle_id
from import
where import_bundle_id = 8) i on a.import_id = i.id
join import_bundle ib on i.import_bundle_id = ib.id
何もしませんでしたimport_bundle.id
にインデックスを追加する:これは私が使用して終了するものです。
クエリプランはどのように見えますか?インデックスはib.idをカバーしていますか? –
「クエリプランはどのように見えますか?」とはどういう意味ですか? –
場合によっては、物事が見えない場合もあります。 2つのクエリをどのように比較しましたか? _first_レコードが取得された時刻または_last_レコードを調べましたか?後者は測定する必要がありますが、SQLクライアントアプリケーションから作業している場合は前者を見るだけで簡単です。 – Axn