mysqlリクエストを最適化する方法は?

TomasBalčiūnas

mysqlリクエストに問題があります。現在、約700〜1300msで動作します(間違いなく遅すぎます)。テーブルには約100万行あります。

Select * 
  from `numbers` 
 where `code` = ? 
   and `id` not in (?) 
   and `open` = ? 
   and `views` >= ? 
   and `last_visit` >= ? 
   and `last_visit` <= ? 
 order 
    by `views` desc
 limit 24

田畑:

"id"   => mediumint, primary, unique
"code" => smallint, not unique, unsigned, not null
"open" => tinyint, unsigned, not null
"views" => smallint, unsigned, not null

このリクエストでパフォーマンスを向上させるにはどうすればよいですか?または、キャッシュ結果など、他の何かを試してみませんか?ありがとう!

ビルカーウィン

テストテーブルを作成し、100万行で埋めました。ランダムデータを使用しました。

これは、テーブルにインデックスが定義されていないクエリのEXPLAINです。インデックスがあるとは言わなかったので、インデックスがないと思いました。

           id: 1
  select_type: SIMPLE
        table: numbers
   partitions: NULL
         type: range
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 3
          ref: NULL
         rows: 523516
     filtered: 0.04
        Extra: Using where; Using filesort

調査された推定行は、100万行の約50%です。また、「ファイルソートの使用」で示されているように、結果をソートする必要があります。これらは両方とも、クエリのコストが高くなる原因になります。

次のインデックスを作成しました。

alter table numbers add key bk1 (code,open,views,last_visit);

このインデックスでこれらの列が順序付けられている理由は次のとおりです。

  • 最初に、等式条件で参照される列codeopen列。
  • 次のviews列は、結果に必要な順序であるため、この順序でインデックスを読み取ると、ファイルソートを実行する必要がなくなります。
  • Last_visitも役立ちます。おそらく、ストレージエンジンが事前フィルタリングを実行できる可能性があります(これはインデックス条件プッシュダウンと呼ばれます)。

idInnoDBセカンダリインデックスには、列のリストの最後に主キーが暗黙的に追加されるため、インデックスに追加する必要はありません

これで、同じクエリのEXPLAINは次のようになります。

           id: 1
  select_type: SIMPLE
        table: numbers
   partitions: NULL
         type: range
possible_keys: PRIMARY,bk1
          key: bk1
      key_len: 10
          ref: NULL
         rows: 527
     filtered: 5.56
        Extra: Using where; Backward index scan; Using index

テーブルをインデックス順に読み取ることができるため、ファイルソートを実行していないことに注意してください。

後方インデックススキャンノートは、MySQL8.0の新しいものです。以前のバージョンのMySQLを使用している場合、これが表示されない場合があります。

また、検査される行の数は1000分の1に削減されます。結果は異なる場合があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

次のmysqlクエリを最適化する方法は?

分類Dev

MySQL Slow Query:次のクエリを最適化する方法は?

分類Dev

スクリプトの速度を最適化する方法は?

分類Dev

mongodbでクエリを適切に最適化する方法は?

分類Dev

このMYSQLクエリを最適化する方法はありますか

分類Dev

MySql-インデックスを使用してクエリを最適化する方法は?

分類Dev

このMySQLクエリを最適化する方法は?数百万行

分類Dev

Mysqlで単純な更新クエリを最適化する方法は?

分類Dev

テーブルクエリ速度MYSQLを最適化する方法

分類Dev

遅いOrderByでMYSQLクエリを最適化する方法

分類Dev

mysqlへのajaxクエリを最適化する方法

分類Dev

mysqlクエリ登録を最適化する方法

分類Dev

内部クエリmysqlを最適化する方法

分類Dev

遅いMySQLクエリを最適化する方法(PHP経由)

分類Dev

mysqlクエリに従う方法を最適化する

分類Dev

phalcon で mysql クエリを最適化する方法

分類Dev

SQLクエリを最適な方法で暗号化する方法は?

分類Dev

ネストされたMySQLクエリを最適化することはできませんか?

分類Dev

このネストされたSQLSELECTクエリを最適化する方法

分類Dev

Laravel 7でクエリステートメントを最適化する方法は?

分類Dev

複数のCASEステートメントでSELECTクエリを最適化する方法は?

分類Dev

MySQLのselectクエリを最適化する方法または高速化する方法

分類Dev

結合クエリを最適化する方法は?

分類Dev

Sum SQLクエリを最適化する方法は?

分類Dev

SQLサブクエリを最適化する方法は?

分類Dev

このActiveRecordクエリを最適化する方法は?

分類Dev

この複雑なクエリを最適化する方法は?

分類Dev

サブクエリを最適化する方法は?

分類Dev

この複雑なクエリを最適化する方法は?

Related 関連記事

  1. 1

    次のmysqlクエリを最適化する方法は?

  2. 2

    MySQL Slow Query:次のクエリを最適化する方法は?

  3. 3

    スクリプトの速度を最適化する方法は?

  4. 4

    mongodbでクエリを適切に最適化する方法は?

  5. 5

    このMYSQLクエリを最適化する方法はありますか

  6. 6

    MySql-インデックスを使用してクエリを最適化する方法は?

  7. 7

    このMySQLクエリを最適化する方法は?数百万行

  8. 8

    Mysqlで単純な更新クエリを最適化する方法は?

  9. 9

    テーブルクエリ速度MYSQLを最適化する方法

  10. 10

    遅いOrderByでMYSQLクエリを最適化する方法

  11. 11

    mysqlへのajaxクエリを最適化する方法

  12. 12

    mysqlクエリ登録を最適化する方法

  13. 13

    内部クエリmysqlを最適化する方法

  14. 14

    遅いMySQLクエリを最適化する方法(PHP経由)

  15. 15

    mysqlクエリに従う方法を最適化する

  16. 16

    phalcon で mysql クエリを最適化する方法

  17. 17

    SQLクエリを最適な方法で暗号化する方法は?

  18. 18

    ネストされたMySQLクエリを最適化することはできませんか?

  19. 19

    このネストされたSQLSELECTクエリを最適化する方法

  20. 20

    Laravel 7でクエリステートメントを最適化する方法は?

  21. 21

    複数のCASEステートメントでSELECTクエリを最適化する方法は?

  22. 22

    MySQLのselectクエリを最適化する方法または高速化する方法

  23. 23

    結合クエリを最適化する方法は?

  24. 24

    Sum SQLクエリを最適化する方法は?

  25. 25

    SQLサブクエリを最適化する方法は?

  26. 26

    このActiveRecordクエリを最適化する方法は?

  27. 27

    この複雑なクエリを最適化する方法は?

  28. 28

    サブクエリを最適化する方法は?

  29. 29

    この複雑なクエリを最適化する方法は?

ホットタグ

アーカイブ