この記事は、「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. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...
この記事では、Web ページ レイアウト デザインのいくつかの簡単な原則をまとめ、Web ページ デ...
ナレッジポイントをプレビューします。アニメーションフレーム背景グラデーションvar() と calc...
多くのネットユーザーは、なぜ自分のウェブサイトはいつも色の問題を抱えていて、いつも地味に見え、注目を...
目次序文グローバルロック完全なデータベース論理バックアップFTWRL と set global re...
utf8mb4 エンコーディングは utf8 エンコーディングのスーパーセットであり、utf8 と互...
mysql のデフォルトのストレージ ディレクトリは/var/lib/mysql/です。以下は、デフ...
データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...
JavaScript での HTML (選択オプション) の詳細な説明1. 基本的な理解:コードをコ...
<br />インターネットは絶えず変化しており、BusinessWeek.com は専門...
序文ActiveMQ は、Apache が開発した最も人気があり強力なオープン ソース メッセージ ...
Dockerはmysqlをインストールします docker search mysql 検索 dock...
データベースはさておき、人生における方言とは何でしょうか?方言とは、ある場所特有の言語です。他の場所...
Navicat は、データベースに接続するときにエラー 10060 および 1045 を報告します...