MySQL で 1000 万件のレコードをすばやくクエリする方法

MySQL で 1000 万件のレコードをすばやくクエリする方法

通常のページングクエリ

日常業務でビッグデータ クエリに遭遇した場合、最初に行うのはページング クエリの使用です。

MySQLは、指定された数のデータを選択するためのlimit文をサポートしていますが、Oracleはrownumを使用して選択することができます。

mysql ページング クエリ ステートメントは次のとおりです。

SELECT * FROM テーブル LIMIT [オフセット,] 行 | 行 OFFSET オフセット
  • 最初のパラメータは、返される最初のレコード行のオフセットを指定するために使用されます。
  • 2 番目のパラメータは、返される行の最大数を指定します。
    • オフセットが同じ場合、データ量が多いほど時間がかかります
    • データ量が同じ場合、オフセットが大きいほど時間がかかります。

最適化する方法

上記の要約から、オフセットが大きく、データ量が多い場合、クエリ時間は依然としてかなり長くなることがわかります。そのため、これら 2 つのタイプの最適化を開始します。

大きなオフセット

サブクエリの使用

まずオフセット位置のIDを見つけて、データを照会します。

テスト制限1000000,10から*を選択
テスト制限 1000000,1 から ID を選択
id>=(テストから id を選択 制限 1000000,1) の条件でテストから * を選択 制限 10

実行してみると、最初のクエリに最も時間がかかり、3 番目のクエリは最初のクエリよりもわずかに速く、インデックスを使用するとサブクエリの方が高速であることがわかります。

しかし、これはIDが増加する場合にのみ適用されます

使用ID制限

この方法にはより高い要件があります。ID は継続的に増加し、ID の範囲を計算してから between を使用する必要があります。SQL は次のとおりです。

select * from test where id between 1000000 and 1000100 limit 100;
id>=1000000 の制限 100 のテストから * を選択

結果はすぐに出る

ここでは、エントリの数を制限するために limit が使用され、 offset は使用されません。

大量データ問題の最適化

  • 返されるデータの量も速度に直接影響します
  • 不要な列を減らすとクエリの効率が大幅に向上します

これで、MySQL で 1000 万件のレコードをすばやくクエリする方法に関するこの記事は終了です。MySQL クイック クエリの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLデータベースの数千万件のデータクエリとストレージの詳細な説明
  • インデックスを使用して数千万のデータを持つ MySQL のクエリ速度を最適化する
  • MySQL 数千万のビッグデータに対するSQLクエリ最適化の知識ポイントのまとめ
  • MySQL数千万の大規模データに対する30のSQLクエリ最適化テクニックの詳細な説明
  • 数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する
  • 数百万件のレコードの分散ストレージを実現するための MySQL シャーディングのバッチ クエリ設計パターンの詳細な説明

<<:  Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

>>:  CSSスコープ(スタイル分割)の使用の概要

推薦する

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...

シンプルな CSS テキストアニメーション効果

成果を達成する 実装コードhtml <div id=コンテナ> いらっしゃいませ <...

Vue のスロットの使用法と適用シナリオの詳細な分析

スロットとは何ですか? Vue では、子コンポーネント タグの中央に何もラップできないことはわかって...

Vue モバイル プロジェクトでページ キャッシュを実装する方法のサンプル コード

背景モバイル デバイスでは、ページ ジャンプ間のキャッシュが必須要件です。例: ホームページ =&g...

Linux で実行可能ファイルを実行するときに「そのようなファイルまたはディレクトリはありません」というプロンプトが表示される場合の解決策

最近、Linux オペレーティング システムを使用して実行可能ファイルを実行していたところ、「そのよ...

HTML と CSS に関する基本的なメモ (フロントエンドでは必読)

HTMLに触れた当初はレイアウトにいつもテーブルを使っていましたが、とても面倒で見た目も悪かったの...

JS でタブ効果を書く

この記事の例では、タブ効果を記述するためのJSの具体的なコードを参考までに共有しています。具体的な内...

EasyUEFI を使用して Windows 10 で USB ドライブなしで Ubuntu 18 をインストールする

1. BIOSを確認するまず、コンピュータの起動モードを確認します。win+R と入力し、msinf...

ReactとReduxの関係を詳しく説明

目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...

Vue プロジェクトはファイルダウンロードの進行状況バー機能を実装します

日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...

ラベルとスパンの幅設定が無効である問題の解決

デフォルトでは、ラベルとスパンの幅の設定は無効です。一般的に、表示属性は必須ですコードをコピーコード...

Javascript で SessionStorage と LocalStorage を使用する方法

目次序文SessionStorage と LocalStorage の紹介SessionStorag...

Ubuntu 18.04 に Nvidia グラフィック カード ドライバーをインストールするチュートリアル (画像とテキスト付き)

0. 事前準備BIOS でセキュア ブートを無効にします。無効にしないと、サードパーティ ソースを...

Dockerコンテナは定期的にデータベースをバックアップし、指定されたメールボックスに送信します(設計アイデア)

目次1. 背景: 2. デザインのアイデア: 3. 起動スクリプトを書く4. イメージを構築する5....

Tudou.comのホームページのデザイン方法

<br />私は数年間フロントエンドに取り組んできました。フロントエンドについて完全に理...