多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 1 を使用するのが最適です。このデータが見つかると、MySQL はすぐにクエリを終了し、それ以上の無駄なクエリを実行しないため、効率が向上します。 実際に、100,000 エントリの MySQL テーブルで Lily のスコアを検索してテストしてみましょう (システムには Lily が 1 人しかおらず、このデータのみが必要であると仮定します)。時間の違いを示すために、テーブルの名前フィールドにインデックスを作成しません。 まずテーブル構造を見てみましょう。 mysql> show テーブル tb_province を作成します。 +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | テーブル | テーブルの作成 | +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tb_province | テーブル `tb_province` を作成します ( `id` bigint(10) 符号なし NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `score` int(10) unsigned DEFAULT '0', `x` int(10) 符号なし デフォルト '0', `x1` int(10) 符号なし デフォルト '0', `x2` int(10) 符号なし デフォルト '0', `x3` int(10) 符号なし デフォルト '0', `x4` int(10) 符号なし デフォルト '0', `x5` int(10) 符号なし デフォルト '0', `x6` int(10) 符号なし デフォルト '0', `x7` int(10) 符号なし デフォルト '0', `x8` int(10) 符号なし デフォルト '0', `x9` int(10) 符号なし デフォルト '0', `x10` int(10) 符号なし デフォルト '0', 主キー (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=124178 デフォルト文字セット=latin1 | +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ セット内の 1 行 (0.00 秒) スイッチ set profiling=1; をオンにして、比較のために mysql ステートメントを実行します。 mysql> name='lily' の tb_province からスコアを選択します。 +-------+ | スコア | +-------+ | 100 | +-------+ セット内の1行(0.03秒) mysql> name='lily' の tb_province からスコアを選択します。 +-------+ | スコア | +-------+ | 100 | +-------+ セット内の1行(0.03秒) mysql> name='lily' の tb_province からスコアを選択します。 +-------+ | スコア | +-------+ | 100 | +-------+ セット内の1行(0.04秒) mysql> name='lily' の tb_province からスコアを選択します。 +-------+ | スコア | +-------+ | 100 | +-------+ セット内の1行(0.02秒) mysql> name='lily' の tb_province からスコアを選択します。 +-------+ | スコア | +-------+ | 100 | +-------+ セット内の1行(0.03秒) mysql> tb_province からスコアを選択します。name='lily' 制限 1; +-------+ | スコア | +-------+ | 100 | +-------+ セット内の 1 行 (0.00 秒) mysql> tb_province からスコアを選択します。name='lily' 制限 1; +-------+ | スコア | +-------+ | 100 | +-------+ セット内の 1 行 (0.00 秒) mysql> tb_province からスコアを選択します。name='lily' 制限 1; +-------+ | スコア | +-------+ | 100 | +-------+ セット内の 1 行 (0.00 秒) mysql> tb_province からスコアを選択します。name='lily' 制限 1; +-------+ | スコア | +-------+ | 100 | +-------+ セット内の1行(0.01秒) mysql> tb_province からスコアを選択します。name='lily' 制限 1; +-------+ | スコア | +-------+ | 100 | +-------+ セット内の 1 行 (0.00 秒) ご覧のとおり、制限 1 を使用するかどうかについて 5 つの比較テストを実施しました。結果を見てみましょう。 mysql> プロファイルを表示します。 +----------+-------------+----------------------------------------------------------------------+ | Query_ID | 期間 | クエリ | +----------+-------------+----------------------------------------------------------------------+ | 5 | 0.02686000 | name='lily' の tb_province からスコアを選択 | | 6 | 0.02649050 | name='lily' の tb_province からスコアを選択 | | 7 | 0.03413500 | name='lily' の tb_province からスコアを選択 | | 8 | 0.02601350 | name='lily' の tb_province からスコアを選択 | | 9 | 0.02785775 | name='lily' の tb_province からスコアを選択 | | 10 | 0.00042300 | name='lily' の tb_province からスコアを選択、制限 1 | | 11 | 0.00043250 | name='lily' の tb_province からスコアを選択、制限 1 | | 12 | 0.00044350 | name='lily' の tb_province からスコアを選択、制限 1 | | 13 | 0.00053200 | name='lily' の tb_province からスコアを選択、制限 1 | | 14 | 0.00043250 | name='lily' の tb_province からスコアを選択、制限 1 | +----------+-------------+----------------------------------------------------------------------+ セット内の行数は 14 行、警告数は 1 (0.00 秒) 制限 1 を使用した後、MySQL ステートメントの効率が実際に大幅に向上していることがわかります。 テーブルが大きくなればなるほど、効率性の向上がより顕著になります。 理論的なスクリプトと実際のスクリプトの両方で制限の利点を実証したので、提案としては、制限が利用可能な場合は制限を使用する (もちろん、結果が複数の場合は、制限 1 を使用することはできません) ということです。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Nginx プロキシ転送構成を通じてクロスドメイン API プロキシ転送を実装する方法
>>: JavaScript の 50 以上のユーティリティ関数の概要
文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...
conda アップデート conda pip で tf-nightly-gpu-2.0-previ...
mysql 5.7.19 winx64解凍版のインストールチュートリアルを収録しました。具体的な内容...
1. 単一行オーバーフロー1. 1 行がオーバーフローした場合、超過部分は表示されます...または、...
序文:前の記事を読んだ後、binlog はデータベースで実行されたすべての DDL および DML ...
最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...
公式サイトの説明: コンポーネントを定義する場合、コンポーネントは複数のインスタンスを作成するために...
注記記事表示リストインターフェースを開発する場合、情報の基本的な概要を提供するために記事ヘッダーコン...
ここに <input type="image"> がある場合、この画...
この記事では、呼吸カルーセル効果を実現するためのjQueryの具体的なコードを参考までに共有します。...
目次1. 終了2. クロージャの使用シナリオ1.タイムアウトを設定する2. コールバック3. 手ぶれ...
1. ブリッジ: デフォルトでは VMnet0 が使用されます1. 原則:ブリッジは、それぞれ 2...
Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...
この記事は、MySQL 8.0.12解凍版のインストールグラフィックチュートリアルを記録しています。...
目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...