序文 クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があります。このとき、何をすればよいでしょうか。心配しないでください。MySQL はすでにそのような機能を提供しています。 SELECT * FROM テーブル LIMIT [オフセット,] 行 | 行 OFFSET オフセット LIMIT 句を使用すると、SELECT ステートメントで指定された数のレコードを返すように強制できます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。引数は整数定数でなければなりません。 2 つの引数が指定された場合、最初の引数は返される最初の行のオフセットを指定し、2 番目の引数は返される行の最大数を指定します。初期行オフセットは 0 (1 ではありません) です。PostgreSQL との互換性のため、MySQL は LIMIT # OFFSET # という構文もサポートしています。 したがって、通常、データをクエリするときには制限ページングを使用します。これにより、テーブル全体のクエリが回避され、クエリの効率が向上します。ただし、テーブル内のデータ量が増えると、ページングクエリは遅くなります。以下で詳細な紹介を見てみましょう。 MySQL ページング制限の最適化 2,000 万件のデータを含むテスト テーブル カードを作成する mysql> カードから count(*) を選択します。 +----------+ | カウント(*) | +----------+ | 20000000 | +----------+ セット内の 1 行 (0.00 秒) -まず最初の1000行のクエリ速度をテストします mysql> カード制限 1000,10 から * を選択します。 +---------+--------------------------------------+ | カードID | カード番号 | +---------+--------------------------------------+ | 1001 | 13fc90a6-2e3b-11e8-ae62-9c5c8e6e37cf | | 1002 | 13fc923e-2e3b-11e8-ae62-9c5c8e6e37cf | | 1003 | 13fc93d5-2e3b-11e8-ae62-9c5c8e6e37cf | | 1004 | 13fc956a-2e3b-11e8-ae62-9c5c8e6e37cf | | 1005 | 13fc9702-2e3b-11e8-ae62-9c5c8e6e37cf | | 1006 | 13fc9899-2e3b-11e8-ae62-9c5c8e6e37cf | | 1007 | 13fc9a31-2e3b-11e8-ae62-9c5c8e6e37cf | | 1008 | 13fc9bc6-2e3b-11e8-ae62-9c5c8e6e37cf | | 1009 | 13fc9d5e-2e3b-11e8-ae62-9c5c8e6e37cf | | 1010 | 13fc9ef5-2e3b-11e8-ae62-9c5c8e6e37cf | +---------+--------------------------------------+ セット内の行数は 10 です (0.00 秒) -100万回後にクエリをテストする mysql> カード制限 1000000,10 から * を選択します。 +---------+--------------------------------------+ | カードID | カード番号 | +---------+--------------------------------------+ | 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000010 | 2d871039-2e3b-11e8-ae62-9c5c8e6e37cf | +---------+--------------------------------------+ 10 行セット (0.18 秒) -1000万回後にクエリをテストする mysql> カード制限 10000000,10 から * を選択します。 +----------+--------------------------------------+ | カードID | カード番号 | +----------+--------------------------------------+ | 10000001 | b11ad76c-2e49-11e8-ae62-9c5c8e6e37cf | | 10000002 | b11aefd5-2e49-11e8-ae62-9c5c8e6e37cf | | 10000003 | b11af868-2e49-11e8-ae62-9c5c8e6e37cf | | 10000004 | b11b0031-2e49-11e8-ae62-9c5c8e6e37cf | | 10000005 | b11b07ad-2e49-11e8-ae62-9c5c8e6e37cf | | 10000006 | b11b0f0f-2e49-11e8-ae62-9c5c8e6e37cf | | 10000007 | b11b1669-2e49-11e8-ae62-9c5c8e6e37cf | | 10000008 | b11b1db2-2e49-11e8-ae62-9c5c8e6e37cf | | 10000009 | b11b24fa-2e49-11e8-ae62-9c5c8e6e37cf | | 10000010 | b11b2c37-2e49-11e8-ae62-9c5c8e6e37cf | +----------+--------------------------------------+ 10 行セット (1.29 秒)
では、100 万個のデータのスキャンを回避するにはどうすればよいでしょうか? 100 万以降の主キーが 100 万より大きいことが明確にわかります。そこで、インデックスを使用するようにSQLを書き直し、スキャンする行数を減らすことができます。 mysql> select * from card where card_id>=1000000 limit 10; +---------+--------------------------------------+ | カードID | カード番号 | +---------+--------------------------------------+ | 1000000 | 2d870088-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000001 | 2d87021a-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000002 | 2d8703ac-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000003 | 2d87053b-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000004 | 2d8706cd-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000005 | 2d87085f-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000006 | 2d8709f1-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000007 | 2d870b83-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000008 | 2d870d18-2e3b-11e8-ae62-9c5c8e6e37cf | | 1000009 | 2d870eaa-2e3b-11e8-ae62-9c5c8e6e37cf | +---------+--------------------------------------+ セット内の行数は 10 です (0.00 秒) これにより、クエリの効率が大幅に向上します。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: CentOS 7.x に ZSH ターミナルをインストールする方法
>>: WeChatアプレットにナンバープレート入力機能を実装
序文Vue(発音は /vjuː/、view に似ています)は、ユーザーインターフェイスを構築するため...
競合の主な症状は、FLASH ボタンがジャンプし続け、不安定になり、Web ページの外観と通常のアク...
目次ドラッグアンドドロップの実装ドラッグイベントドラッグして開始リリースゾーンでの移動境界処理、角度...
序文Index Condition Pushdown (ICP) は、MySQL 5.6 の新機能で...
以前は、境界線の長さをコンテナーよりも小さくする必要があったときに、div ネストを使用していました...
MySQL 8.0圧縮パッケージのインストール方法、詳細は次のとおりです知らせ:オペレーティング シ...
1 背景最近、ZC706-ARM 開発ボードの Linux システムでコンパイル システム (apt...
以前にインストールしたmariadbを削除する1. rpm -qa | grep mariadb を...
1. 概念分析 1: UE ユーザー エクスペリエンス <br />英語ではユーザー エ...
目次2. フィールドの連結2. MySQL関数の例をいくつか挙げてください。 2.1 シンボル処理2...
データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...
1. イベントバブリング: JavaScript イベント伝播のプロセスでは、要素でイベントがトリガ...
昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...
目次SVG による画像キャプチャCSS部分エフェクト画像表示ソースコードアドレスこれまで見てきたもの...
目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...