序文 クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があります。このとき、何をすればよいでしょうか。心配しないでください。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アプレットにナンバープレート入力機能を実装
1. docker imagesを使用して、このマシン上のすべてのイメージファイルを表示します。 2...
特記事項:この記事は、Chris Spooner の英語記事「Web デザイン用の Retina グ...
バックエンド プログラマーは、さまざまな場所で Linux を扱います。Linux ログの読み方がわ...
もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...
yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...
tomcat 設定ファイルから、tomcat の起動時にデフォルトで 8080 (8443)、800...
最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...
Linux で新たに発見された sudo の脆弱性を悪用すると、特定のユーザーが root としてコ...
目次1. ソリューション 1 (UDF)デモケース2. ソリューション2(binlogの解析)キャナ...
フローティング要素は、親要素の高さを縮小します。要素を float float:left/right...
目次1. 分離レベルコミットされていない読み取りREAD COMMITED (コミット読み取り/非反...
<tfoot> タグは、テーブル フッターのスタイルを定義するために使用されます。基本構...
この記事では、Reactリストバーとショッピングカートコンポーネントの具体的なコードを参考までに紹介...
スロットとは何ですか?スロット ディレクティブは v-slot であり、現在 slot と slot...
1. インターネットで長時間検索しましたが、判定表が存在するかどうかがわからなかったので、漠然と削除...