この記事は、「1 分でインデックス作成スキルを学ぶ」という宿題から生まれました。 注文ビジネス テーブルの構造が次のとおりであると仮定します。 順序(oid、日付、uid、ステータス、金額、時間、…) で:
注文には 0 が発注済み、1 が支払い済み、2 が完了の 3 つの状態があるとします。 ビジネス要件: 未完了の注文をクエリする場合、どの SQL の方が高速ですか?
結論: ソリューション 1 は最も遅く、ソリューション 2、3、4 はすべてインデックスにヒットできます。 しかし... 1: union allは確実にインデックスにヒットする ステータス=0 の順序から * を選択 すべて結合 ステータスが 1 である順序から * を選択 例: MySQLに何をするかを直接指示すると、MySQLはCPUを最も少なく消費します プログラマーはこのようなSQLを書くことはあまりありません(union all) 2: シンプルインでインデックスにヒットできる ステータスが (0,1) である順序から * を選択 例: MySQLに考えさせると、クエリの最適化はunion allよりも多くのCPUを消費しますが、無視できるほどです。 プログラマーはSQLを次のように書くことが多い。この例では、次のように書くのが推奨される。 3: または、MySQLの新しいバージョンはインデックスにヒットすることができます ステータス=0 またはステータス=1 の順序から * を選択します 例: MySQL に考えさせてください。クエリの最適化は IN よりも多くの CPU を消費します。MySQL に負担をかけないでください。 すべての or がインデックスにヒットするわけではないので、プログラマが or を頻繁に使用することは推奨されません。 MySQLの古いバージョンの場合は、クエリと分析を行うことをお勧めします。 4. !=の場合、否定クエリは確実にインデックスにヒットしません ステータスが 2 である順序から * を選択 例: フルテーブルスキャンは、すべてのソリューションの中で最も効率が悪く、最も遅い 否定的な検索は禁止されています V. その他のオプション ステータスが 2 未満の順序から * を選択 この特定の例では、確かに高速ですが、 この例では、3 つの状態のみが示されています。実際の業務では、これら 3 つの状態よりも多くの状態があり、状態の「値」は半順序関係を満たすだけです。他の状態をチェックしたい場合はどうすればよいでしょうか。SQL は列挙の値に依存すべきではなく、解決策は普遍的ではありません。 この SQL は読みにくく、理解しにくく、保守性も低いため、強く推奨されません。 6. 宿題 このようなクエリはインデックスにヒットできますか? uid in (の順序で*を選択 ステータス=0の注文からUIDを選択 ) select * from order where status in (0, 1) order by date desc ステータスが 0 または日付が CURDATE() である順序から * を選択します 注: これは単なる例です。業務に対応する SQL の合理性についてはあまりこだわらないでください。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Tomcat で複数の war パッケージを展開する方法と手順
>>: vue+px2rem(rem適応)を使用してPCで大画面適応を実装するためのサンプルコード
1. 問題の説明今日、システム ログ ファイルを確認する必要がありますが、/var/log/mess...
clear:both清除浮動これは私が常に持っていた印象ですが、私はこれをめったに使用せず、私の理...
職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...
目次レプリケーション ロジックの簡単な概要:遅延の原因と解決策〇メインデータベースへの頻繁なDMLリ...
1. 事業背景マスク レイヤーを使用してユーザーの異常な操作を遮断する方法は、フロントエンドでよく使...
概要Nginx ロード バランシングは、アップストリーム サーバー (実際のビジネス ロジックによっ...
docker-compose.yml を編集し、次のコンテンツを追加します。 バージョン: '...
序文403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-...
目次1. インストールの準備1. Linux関連情報の表示(Linuxコマンドライン操作) 2. M...
目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...
1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...
デスクトップ システムをダウンロードするには、Ubuntu の公式 Web サイト (https:/...
最初のステップ組み込みのパッケージ管理機能で一度削除する yum 削除 nodejs npm -y ...
フレーム ウィンドウの関連付けを実現するには、次に示すように、ハイパーリンクの「ターゲット」ウィンド...
多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...