84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
これはすべてユニオンです
学习是最好的投资!
まず第一に、これら 2 つのクエリ間のパフォーマンスの差は大きくないはずです。 ad_id 列が主キーであるためです。
型列分析によると: またはクエリ、type: rangetype:rangeunion all 查询:type:const / const / ALLunion allクエリ: type: const / const / ALL
type: range
type:range
type:const / const / ALL
type: const / const / ALL
最初に確認できるのは、const の方が range よりも優れているということです。const 要优于 range.constconst は、ad_id が主キーであるためでもあります。
const
range
しかし、union all は 3 つの操作、2 つの主キーまたは一意のインデックス クエリ type:const を実行しますが、最終的に結合された type:ALL type:ALL 自体のパフォーマンスは range よりも劣ります
タイプの観点から見ると、クエリのパフォーマンスが向上するはずです。
追加分析またはクエリ: インデックス条件を使用するUsing index conditionunion all 查询:NULL / NULL / Using temporary全結合クエリ: NULL / NULL / 一時的な使用
インデックス条件を使用する
Using index condition
NULL / NULL / Using temporary
NULL / NULL / 一時的な使用
インデックス条件の使用は、MySQL 5.6 バージョン以降に新たに追加された機能、インデックス条件プッシュです。
まず、プッシュするインデックス条件がない場合の処理フローについて説明します。
オプティマイザーが ICP を使用しない場合、データのアクセスと抽出のプロセスは次のようになります: 1) ストレージ エンジンは次の行を読み取るとき、最初にインデックス タプルを読み取り、次にそのインデックス タプルを使用してベース テーブル内のデータの行全体を見つけて読み取ります。 2) サーバー層は where 条件を評価し、データの行が where 条件を満たしている場合は使用され、そうでない場合は破棄されます。 3) 1)をデータの最終行まで実行します。
オプティマイザーが ICP を使用しない場合、データのアクセスと抽出のプロセスは次のようになります:
1) ストレージ エンジンは次の行を読み取るとき、最初にインデックス タプルを読み取り、次にそのインデックス タプルを使用してベース テーブル内のデータの行全体を見つけて読み取ります。 2) サーバー層は where 条件を評価し、データの行が where 条件を満たしている場合は使用され、そうでない場合は破棄されます。 3) 1)をデータの最終行まで実行します。
インデックス条件プッシュがある場合の処理フロー:
オプティマイザーが ICP を使用すると、サーバー層はインデックスを使用して評価できる where 条件をストレージ エンジン層にプッシュします。データのアクセスと抽出のプロセスは次のとおりです: 1) ストレージ エンジンは、インデックスから次のインデックス タプルを読み取ります。 2) ストレージ エンジンはインデックス タプルを使用して、プッシュダウン インデックス条件を評価します。 where 条件が満たされない場合、ストレージ エンジンは次のインデックス タプルを処理します (前のステップに戻ります)。インデクスタプルがプッシュダウンインデクス条件を満たす場合に限り、実表からのデータの読み込みが継続されます。 3) プッシュダウン インデックス条件が満たされる場合、ストレージ エンジンはインデックス タプルを通じてベース テーブルの行を見つけ、データの行全体を読み取り、サーバー層に返します。 4) サーバー層の評価はストレージ エンジン層の where 条件にプッシュダウンされず、データ行が where 条件を満たす場合は使用され、そうでない場合は破棄されます。
オプティマイザーが ICP を使用すると、サーバー層はインデックスを使用して評価できる where 条件をストレージ エンジン層にプッシュします。データのアクセスと抽出のプロセスは次のとおりです:
1) ストレージ エンジンは、インデックスから次のインデックス タプルを読み取ります。 2) ストレージ エンジンはインデックス タプルを使用して、プッシュダウン インデックス条件を評価します。 where 条件が満たされない場合、ストレージ エンジンは次のインデックス タプルを処理します (前のステップに戻ります)。インデクスタプルがプッシュダウンインデクス条件を満たす場合に限り、実表からのデータの読み込みが継続されます。 3) プッシュダウン インデックス条件が満たされる場合、ストレージ エンジンはインデックス タプルを通じてベース テーブルの行を見つけ、データの行全体を読み取り、サーバー層に返します。 4) サーバー層の評価はストレージ エンジン層の where 条件にプッシュダウンされず、データ行が where 条件を満たす場合は使用され、そうでない場合は破棄されます。
簡単に言えば、ICP がない場合、ストレージ エンジンは条件を満たすすべてのデータ行を返し、サービス層で where 条件フィルタリングを実行します。 ICP がある場合、where 条件はストレージ エンジン層にプッシュダウンされ、ストレージ エンジンは条件を満たすデータを直接返します。 パフォーマンスは当然大幅に向上します。
ICP の関連紹介については、ここでご覧いただけます
一時の使用は暗黙的な一時テーブルを意味します。これは、MySQL が中間データを保存するための一時テーブルを生成することを意味します。なぜなら、union all は別々に処理されて最後にマージされる関係だからです。 エクストラから、それはクエリのパフォーマンスが高いことも必要です。
全体: OR クエリのパフォーマンスは UNION ALL よりも優れているはずです。
データ量が増えるとすべてのクエリのパフォーマンスが変化するため、上記の分析は被験者が投稿したExplain分析結果に基づいています。これは、あらゆる状況において OR が UNION ALL よりも優れているというわけではありません。
上記は個人的な意見ですので、間違いがあればご指摘ください。
これら 2 つの文の間に違いはありません。 一般に、OR が 2 つの異なるフィールドを接続し、インデックスが使用できない場合、パフォーマンスが低下し、結合ほど良くありません。
まず第一に、これら 2 つのクエリ間のパフォーマンスの差は大きくないはずです。
ad_id 列が主キーであるためです。
型列分析によると:
またはクエリ、
type: range
type:range
union all 查询:
type:const / const / ALL
union allクエリ:type: const / const / ALL
最初に確認できるのは、
const
の方がrange
よりも優れているということです。const
要优于range
.const
const
は、ad_id が主キーであるためでもあります。しかし、union all は 3 つの操作、2 つの主キーまたは一意のインデックス クエリ type:const を実行しますが、最終的に結合された type:ALL
type:ALL 自体のパフォーマンスは range よりも劣ります
タイプの観点から見ると、クエリのパフォーマンスが向上するはずです。
追加分析
またはクエリ:
インデックス条件を使用する
Using index condition
union all 查询:
NULL / NULL / Using temporary
全結合クエリ:NULL / NULL / 一時的な使用
インデックス条件の使用は、MySQL 5.6 バージョン以降に新たに追加された機能、インデックス条件プッシュです。
まず、プッシュするインデックス条件がない場合の処理フローについて説明します。
インデックス条件プッシュがある場合の処理フロー:
簡単に言えば、ICP がない場合、ストレージ エンジンは条件を満たすすべてのデータ行を返し、サービス層で where 条件フィルタリングを実行します。
ICP がある場合、where 条件はストレージ エンジン層にプッシュダウンされ、ストレージ エンジンは条件を満たすデータを直接返します。
パフォーマンスは当然大幅に向上します。
ICP の関連紹介については、ここでご覧いただけます
一時の使用は暗黙的な一時テーブルを意味します。これは、MySQL が中間データを保存するための一時テーブルを生成することを意味します。なぜなら、union all は別々に処理されて最後にマージされる関係だからです。
エクストラから、それはクエリのパフォーマンスが高いことも必要です。
全体: OR クエリのパフォーマンスは UNION ALL よりも優れているはずです。
データ量が増えるとすべてのクエリのパフォーマンスが変化するため、上記の分析は被験者が投稿したExplain分析結果に基づいています。これは、あらゆる状況において OR が UNION ALL よりも優れているというわけではありません。
上記は個人的な意見ですので、間違いがあればご指摘ください。
これら 2 つの文の間に違いはありません。
一般に、OR が 2 つの異なるフィールドを接続し、インデックスが使用できない場合、パフォーマンスが低下し、結合ほど良くありません。