ホームページ  >  に質問  >  本文

mysql の最適化 - mysql クエリ中のインデックスの失敗と、スキャンされた行の数がデータ行の合計数を超えていることに関する質問です。

データ テーブルは innodb エンジンを使用し、updated_at フィールドは通常のインデックスを使用します。

3 つの質問:

  1. 最初の 2 つのステートメントを比較すると、2 番目のステートメントではインデックスが使用されていません。スキャンされた行数が一定の数に達すると、インデックスは放棄されると記憶しています。重要な値は何ですか?

  2. フル テーブル スキャンでは、スキャンされた行数は 70341 であることが示されていますが、データ行の合計数は 57087 のみですか?

  3. select count(*) はインデックスを使用しますが、70341 行もスキャンします。このステートメントはパフォーマンス上の問題を引き起こしますか?

淡淡烟草味淡淡烟草味2690日前1267

全員に返信(1)返信します

  • 滿天的星座

    滿天的星座2017-06-30 09:54:51

    1. CBO 最適化メカニズムのデータベースでは、インデックスを使用するかどうかについての明確な重要な値はありません。実行計画の最小 COST が基準として使用されます。テーブル内の行の合計数は 5% 未満です。

    2. 2 番目のステートメントはテーブルの統計データを使用していることを理解しています。テーブルに最近大きな変更が加えられ、統計データが適時に更新されている場合、2 つのステートメントの間に大きな差異が生じることになります。

    3. count(*) はインデックスを使用します。これは、update_at フィールドに NOT NULL の定義があることを意味し、テーブル全体のスキャンと比較して、インデックスのスキャンのコストが低くなります。

    返事
    0
  • キャンセル返事