これについて同様の質問があることは知っていますが、このクエリの理由について特定のクエリ/質問があります
EXPLAIN SELECT DISTINCT RSubdomain FROM R_Subdomains WHERE EmploymentState IN (0,1) AND RPhone='7853932120'
この出力の説明を教えてください
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE RSubdomains index NULL RSubdomain 767 NULL 3278 Using where
RSubdomains を使用し、RSubdomain にインデックスを付ける
しかし、EmploymentState/RPhone に複合インデックスを追加すると
説明からこの出力を取得します
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE RSubdomains range EmploymentState EmploymentState 67 NULL 2 Using where; Using temporary
RSubdomainsでdistinctを取り除くと、説明出力からUsing tempが削除されます...しかし、得られないのは、複合キーを追加すると(そしてRSubdomainでキーを保持すると)、distinctが終了する理由です一時テーブルを使用していて、ここではどのインデックス スキーマが優れていますか? 結合されたキーでスキャンされる行の量ははるかに少ないことがわかりますが、クエリは範囲型であり、速度も低下します。