MySQL データベース操作では、一部のクエリを実行するときにデータベース エンジンが完全なテーブル スキャンを実行することを常に回避する必要があります。完全なテーブル スキャンには長い時間がかかり、ほとんどのスキャンはクライアントにとって無意味だからです。実際、Limit キーワードを使用すると、テーブル全体のスキャンを回避し、効率を向上させることができます。 MySQL 5.0.x には数千万件のレコードを含むテーブルがあり、数億件のレコードを読み取る必要があります。よく使用される方法は、順番に繰り返します。 index_col = xxx limit offset, limit の場合、mytable から * を選択します。 経験: BLOB/テキスト フィールドがなく、単一行レコードが比較的小さい場合は、制限をより大きな値に設定してプロセスを高速化できます。 問題:最初の数万件のレコードは非常に速く読み取られますが、速度は直線的に低下します。同時に、MySQL サーバーの CPU は 99% であり、これは許容できません。 MySQLの最適化ドキュメントには「すべて」の説明が書かれています
mytable から * を選択します。id > offset かつ id < offset + limit かつ index_col = xxx explain では type = range が表示され、結果の速度は非常に理想的で、数十倍速く結果が返されます。 制限構文: SELECT * FROM テーブル LIMIT [オフセット,] 行 | 行 OFFSET オフセット LIMIT 句を使用すると、SELECT ステートメントで指定された数のレコードを返すように強制できます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。引数は整数定数でなければなりません。 2 つの引数が指定された場合、最初の引数は返される最初の行のオフセットを指定し、2 番目の引数は返される行の最大数を指定します。最初のレコード行のオフセットは 0 (1 ではない) です。 PostgreSQL との互換性のため、MySQL は LIMIT # OFFSET # という構文もサポートしています。 mysql> SELECT * FROM table LIMIT 5,10; // 6-15行目を取得 //特定のオフセットからレコードセットの最後までのすべての行を取得するには、2番目のパラメータを-1に指定します。 mysql> SELECT * FROM table LIMIT 95,-1; // 96行目から最後の行までを取得 //パラメータが1つだけ指定されている場合は、返される行の最大数を示します。つまり、LIMIT nはLIMIT 0,nと同じです。 mysql> SELECT * FROM table LIMIT 5; // 最初の5行を取得します MySQL の制限はページングに非常に便利ですが、データ量が多い場合、制限のパフォーマンスは急激に低下します。同じ 10 個のデータを使用しても、次の 2 つの文は同じ桁数ではありません。 テーブル制限10000,10から*を選択 テーブル制限 0,10 から * を選択 この記事では、制限は直接使用されません。代わりに、最初にオフセット ID を取得し、次に制限サイズを直接使用してデータを取得します。彼のデータによれば、limit を直接使用するよりも明らかに優れています。 ここでは、データを使用して 2 つの状況でテストします。 1. オフセットが比較的小さい場合: テーブル制限10,10から*を選択 // 複数回実行し、時間を 0.0004 ~ 0.0005 の範囲に保ちます。Select * From table Where vid >=(Select vid From table Order By vid limit 10,1) limit 10 // 複数回実行し、時間は 0.0005 ~ 0.0006 の間で維持されます (主に 0.0006) 結論: オフセットが小さい場合は、limit を直接使用する方が適切です。これが明らかにサブクエリの理由です。 2. オフセットが大きい場合: テーブル制限10000,10から*を選択 // 複数回実行しても、時間は 0.0187 程度のままです。Select * From table Where vid >=(Select vid From table Order By vid limit 10000,1) limit 10 // 複数回実行した後も、時間は 0.0061 程度のままで、前回の 1/3 にすぎません。オフセットが大きいほど、後者の方が優れていることが期待できます。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: WIN10 に複数のデータベースがインストールされている場合にコンピュータの速度低下を防ぐ方法
>>: ログインフォームを実装するためのJavaScript
<br />Web ページをデザインするときには、いつも不快なことに遭遇します。最も一般...
フロントエンド開発を行っている初心者の学生を多く見かけますが、彼らの効率は比較的遅いです。常にコード...
この記事では、WeChatアプレットでジグソーパズルゲームを実装するための具体的なコードを参考までに...
作成したイメージを一元管理し、サービスの展開を容易にするために、プライベート Docker リポジト...
目次1. 遅いところはどこですか? 2. 不要なデータをクエリしましたか? 1. 不要なレコードをク...
ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...
セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...
目次1. 問題2. 解決策2.1 ページングコンポーネント2.2 データベースデータを取得する関数:...
DOCTYPE 宣言 作成するすべてのページの先頭に、ドキュメント宣言が必要です。はい、そうでしょう...
プロジェクト(nodejs)では、一度に複数のデータをデータベースに挿入する必要があります。データベ...
目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...
ネイティブjsカプセル化シームレスカルーセルプラグイン、参考までに、具体的な内容は次のとおりです。例...
注1: MySQLデータベースへの接続が遅い問題を解決するvim /etc/my.cnfコンテン...
目次ToDoリストを例に挙げましょうディレクトリは次のとおりですアプリ入力.jsリスト.jsアイテム...
効果 html <本文> <div class="content&quo...