簡単なSELECT * From tv Where Client = 'ABCD'
クエリを実行すると、EXPLAIN EXTENDED
2 つの異なる結果が得られます。クエリを実行すると、1 つは数ミリ秒かかり、もう 1 つは約 3 秒かかります。2 つの異なる Explain 結果が得られるのはなぜですか? また、速度低下の原因は何ですか?
スロークエリ:
高速クエリ:
テーブル統計を更新することで解決しました。
MySQLで私はしました:
OPTIMIZE TABLE [tablename]
まあ推定行数も違います。
そのため、MySQL はテーブル統計を使用して、どのインデックスをどのように使用するかを決定します。テーブルには異なる量の行が含まれているように見えるため、統計が異なるため、クエリ プランが異なることは合理的です。
アップデート:
行の列を正しく読みませんでした。したがって、行に大きな違いがあると想定しました。これはそうではありません。クエリが遅いテーブルでは、統計が古くなっている可能性があります。スロー クエリ テーブルに対して OPTIMIZE TABLE ステートメントを実行してください。これにより、基本的にテーブルが再構築されます。
遅いクエリはタイプを as としてref
示し、高速クエリはタイプを として示しますrange
。遅いテーブルのクライアント行にインデックスがないと思われます。