MySQL は SQL ステートメントの最新のレコードをクエリします (最適化)

MySQL は SQL ステートメントの最新のレコードをクエリします (最適化)

最悪の選択肢は、結果を時間順に並べ替えて最初のものを取ることです。

*から選択 
ここで、create_time<="2017-03-29 19:30:36" 
create_time 降順で並び替え
制限 1

この方法では、現時点で最新のレコードを取得できますが、クエリごとにテーブルを 1 回トラバースする必要があるため、100 万を超えるデータ ポイントを含むクエリでは時間がかかります。limit では、最初にすべての結果を取得してから最初の結果を取得するため、クエリで不要な時間とスペースが消費されます。また、最新のレコードをバッチで取得する必要がある場合 (たとえば、「注文テーブルにユーザー、注文時間、金額があり、すべてのユーザーの最新の注文レコードを一度にクエリする必要がある場合」)、各ユーザーのクエリでテーブル全体を 1 回トラバースする必要があります。データが大きい場合、時間は指数関数的に増加し、実用的ではありません。

中間戦略 - クエリをソートしてグループ化する

(から*を選択
  *から選択
  ここで、create_time<="2017-03-29 19:30:36" 
  create_time 降順で並び替え
) ユーザーIDでグループ化

その後、group by を使用すると、group by のパラメータ列でグループ化できますが、返される結果は 1 つだけであることがわかりました。注意深く観察すると、group by はグループ化後の最初のレコードを返すことがわかりました。デフォルトでは、時間はクエリ後に順番にソートされるため、現在の時間に最も近いものを取得するには、まず時間を逆順にソートする必要があります。

このクエリは実際には 2 つのクエリを実行します。時間は最初の方法よりもはるかに高速ですが、さらに最適化することができます。

最善の戦略は、max()メソッドをgroup byと組み合わせて使用​​することです。

*,max(create_time)をaから選択
ここで、create_time<="2017-03-29 19:30:36" 
ユーザーIDでグループ化

この文は、結果セットを user_id に従ってグループ化し、各グループ内で最大時間を持つレコードを取得すると理解できます。これにより、最新のレコードを一括でクエリすることが可能になり、テーブルを一度走査するだけで済むため、データ量が膨大な場合でも非常に短時間で結果を見つけることができます。

拡張機能:

資産機器テーブルができました: base_assets_turn

最新の資産管理者を照会する

注: 資産番号ASSETS_ID=254と仮定します。

次善の選択肢:

base_assets_turn から * を選択 
ASSETS_ID = 254の場合
create_time 降順で並び替え
制限 1

中間ポリシー:

選択 * から ( 選択 * から base_assets_turn 
ASSETS_ID = 254の場合
order by create_time desc) tt GROUP BY tt.ASSETS_ID;

最善の戦略:

では、最善の戦略はどのように書けばよいのでしょうか? ぜひメッセージをお寄せください!

上記は、編集者が提供した最新のレコードをクエリするためのMySQL SQL文(最適化)です。皆様のお役に立てれば幸いです。ご質問があれば、メッセージを残してください。

以下もご興味があるかもしれません:
  • MySQL で SQL クエリを最適化するための 30 の一般的な方法について簡単に説明します。
  • MYSQL クエリの効率を向上させる 10 の SQL ステートメント最適化テクニック
  • MySQL SQL 文を最適化するための 10 のヒント
  • MySQL SQL ステートメント分析とクエリ最適化の詳細な説明
  • MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。
  • MySQL SQL文を最適化するためのヒント
  • MySQL の最適化: 高品質の SQL 文を書く方法
  • MySQL を最適化するための 19 の一般的かつ効果的な方法 (推奨!)

<<:  Linux でのプロセスデーモン スーパーバイザーのインストール、構成、および使用

>>:  ネイティブ Js で実装されたシンプルなシームレス スクロール カルーセルのサンプル コード

推薦する

最もよく使用されるJavaScriptイベントについて詳しく学ぶ

目次JavaScript イベント:よく使用されるイベント:イベントアクション要約するJavaScr...

マークアップ言語 - アンカー

前: マークアップ言語 - フレーズ要素 オリジナルソース 第 7 章 アンカーHTML のリンクの...

Windows Server 2008R2、2012、2016、2019 の違い

目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...

下線を実現するための CSS3 トランジションの例コード

この記事では、下線を実現するための CSS3 トランジションのサンプル コードを紹介します。このコー...

PostgreSQL正規表現の一般的な機能の概要

PostgreSQL正規表現の一般的な機能の概要正規表現は、複雑なデータ処理を必要とするプログラムに...

JavaScript配列の一般的なメソッドの詳細な説明

目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...

HTML テーブル マークアップ チュートリアル (10): セル パディング属性 CELLPADDING

セルのパディングは、セルの内容と境界線の間の距離です。基本的な構文<TABLE セルパディング...

nginx を使用して 1 つのドメイン名で複数の Laravel プロジェクトを構成する方法の例

背景会社のサブプロジェクトが増えるにつれて、さまざまなサイズのプロジェクトが10個以上になります(バ...

Centos7でのパーティションのフォーマットとマウントの実装

Linux では、ハードディスクの追加やパーティションの再マウントといった状況に頻繁に遭遇します。こ...

マウスの尾行効果を実現する JavaScript

マウス効果では、setTimeout を使用して固定時間にノードを生成し、ノードを削除し、生成された...

インラインブロックを使用した複数のdiv間の間隔はプログラミング方法とは異なります

inline-block について学習しているときに、境界線と inline-block を持つ複数...

ESXI の仮想マシンにワークステーションをインストールするときに発生するネットワーク障害の解決策

問題の説明ESXI で Windows にワークステーションをインストールした後、内部の仮想マシンは...

Vue が Web オンラインチャット機能を実現

この記事では、Webオンラインチャットを実装するためのVueの具体的なコードを参考までに紹介します。...

docker を使用して kafka プロジェクトをデプロイする Centos6 方法の分析

この記事では、Docker を使用して Centos6 に Kafka プロジェクトをデプロイする方...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...