MySQLのテーブル構造体
MySQLの範囲クエリ、大規模な使用のインデックス裁判官範囲
それは、私は混乱しますMySQLでクエリの範囲影響の使用インデックス !!!!!!!!!場合!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!簡単で
MySQLのテーブル構造体
MySQLの範囲クエリ、大規模な使用のインデックス裁判官範囲
それは、私は混乱しますMySQLでクエリの範囲影響の使用インデックス !!!!!!!!!場合!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!簡単で
、私は、MySQLデータベース が EXPLAIN SELECT * FROM t_teacher_course_info WHERE teacher_id >1 and teacher_id < 5000
を実行使用すると、すべてのt_teacher_course_infoインデックスINDEX `idx_teacher_id_last_update_time` (`teacher_id`, `last_update_time`)
が、変化範囲 EXPLAIN SELECT * FROM t_teacher_course_info WHERE teacher_id >1 and teacher_id < 10000
ID SELECT_TYPEのテーブル型possible_keysかのキーkey_lenにREF行エクストラ
1 1 SIMPLEを使用します。 idx_teacher_update_time 671082使用方法
すべてのテーブルをスキャンし、インデックスを使用しないでください。 ny mysql config インデックスを使用する場合は、おそらく行数判定をスキャンします。 !!!!!!!
これは何が起こるかです。それは実際には最適化です。
(例えばINDEX(teacher_id)
など)二次キーを使用する場合は、処理は次のように進む:
1
)を見つけて、前方にスキャンする(5000
または10000
まで)ことは非常に効率的です。SELECT *
)。これは、PRIMARY KEY
を使用します。コピーはセカンダリキーにあります。 PKとデータは一緒にクラスタリングされます。 1つのPK値による各ルックアップは効率的です(再び、BTree)が、5000または10000を実行する必要があります。したがって、コスト(時間がかかる)が加算されます。A「テーブル・スキャン」(すなわち、任意のINDEX
を使用していないが)このように書きます:
WHERE
句(teacher_id
の範囲)を確認します。テーブルの20%以上を調べる必要がある場合、テーブルスキャンは実際にはセカンダリインデックスとデータの間を行き来するよりも高速です。
したがって、「大」は約20%程度です。実際の値は表の統計などに依存します。
最終行:オプティマイザにその処理を任せます。 最もよく知っているのはです。
私はそれをありがとう、:) –
スクリーンショットを使用するのではなく、質問にSQLを追加してください。また、助けが必要なものを示す簡潔な質問と、何が壊れているかを示すコードの縮小バージョンを含めてください。 – Hans