この記事は、「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で大画面適応を実装するためのサンプルコード
この記事の例では、カード配布アニメーションを実装するためのJSの具体的なコードを参考までに共有してい...
公式ドキュメント:したがって、mysql は次のように起動する必要があります。 docker run...
序文最近、データベースのテーブルに 2 つのフィールドを追加しました。その後、ディスク容量不足のよう...
CocosCreator バージョン: 2.3.4ほとんどのゲームにはレイヤー管理機能があり、例えば...
シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...
これで、autocomplete と呼ばれる input の属性を使用できるようになりました。オート...
1. DOM要素を挿入、更新、または削除するときに、適切な場合は要素にスタイルクラス名を追加します。...
1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...
関数を記述できます。主に正規表現を使用して判断を行います。入力文字が空の場合は、「-」を使用して置き...
Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...
まずは簡単なデータを見てみましょう。 Googleが発表したレポートによると、 ①中国の都市の97%...
結果:実装コードhtml <ul class="スライド"> <...
1. CentOSイメージをダウンロードする1.1 ダウンロードウェブサイトhttp://mirro...
カーネル内の強力なツール cgroup は、NameSpace によって分離されたリソースを制限でき...
目次グローバル登録部分登録ローカル自動登録さまざまなソリューションの比較コンポーネント名について参照...