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スコープ(スタイル分割)の使用の概要

推薦する

CSS スタイルを変更してグレーの Web ページ (色なし、明るい白黒のみ) を実現するいくつかの方法

通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...

Linux システム MySQL8.0.19 クイックインストールと構成チュートリアル図

目次1. 環境の紹介2. MySQL-8.0.19をインストールする3. MySQLを設定する1. ...

Vue開発の詳細な説明 ソートコンポーネントコード

目次 <テンプレート> <ul class="コンテナ">...

JavaScript スコープチェーンの基本原理のグラフィカルな説明

目次序文範囲1. スコープとは何ですか? 2. [[スコープ]] プロパティ3. スコープチェーン4...

MySQL で重複レコードを見つけて削除する方法

みなさんこんにちは。私は技術の話ばかりして髪を切らない先生のトニーです。何らかの歴史的な理由や誤操作...

Centos7 で mysqldump を使用して MySQL データベースの毎日の自動バックアップを作成する

1. 要件:データベースのバックアップは、実稼働環境にとって特に重要です。データベースのバックアップ...

Linuxテキスト処理ツールの詳細な説明

1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...

CocosCreator MVCアーキテクチャの詳細な説明

概要この記事では、ゲームクライアントでよく使用される MVC アーキテクチャについて紹介します。ゲー...

SQLデータベースの14の事例の紹介

データシート /* Navicat SQLite データ転送 ソースサーバー: school ソース...

React 手書きタブ切り替え問題

親ファイル React をインポートし、{useState} を 'react' か...

CSSのline-heightを継承する方法

Line-height はどのように継承されますか?30px などの特定の値を書き込むと、この値が継...

txt ブックの内容を Web ページに表示するコード

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1...

MYSQLでプロシージャの名前を変更する方法の詳細な説明

最近、ストアド プロシージャの名前を変更する機能を使用しました。インターネットで情報を検索しましたが...

最適なウェブページ幅とその互換性のある実装方法

1. Web ページをデザインするときに、幅を決定するのは非常に面倒な作業です。 jb51.net ...

MYSQL ローカルインストールと問題解決

序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...