ホームページ >データベース >mysql チュートリアル >WHERE 句の条件の順序は MySQL クエリのパフォーマンスにどのように影響しますか?
WHERE 句の条件順序が MySQL のパフォーマンスに与える影響
多数の条件を含む複雑なクエリを作成する場合、それらの条件を指定する順序によって、 MySQL のパフォーマンスに影響を与えます。通常、単純な条件の場合、順序にほとんど違いはありませんが、1 つの条件によって結果セットが大幅に絞り込まれる場合、順序はより重要になります。
次の 2 つのクエリを考えてみましょう。
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar)
Inどちらのクエリでも、OR 条件を使用して複数のフィールドにわたって特定の基準を満たす行を検索します。通常、最初の条件は大きな結果セットを生成しますが、「company」条件は結果をより狭いセットに制限します。
MySQL の実行プランによれば、WHERE 条件は左から右の評価順序に従います。 。これは、最初のクエリで、MySQL が OR 条件を適用する前に「company」条件を実行することを意味します。 「company」条件が返す行数が少ない場合、MySQL は効率を高めるためにそれらの行にインデックスを付け、後続の OR 条件の処理のオーバーヘッドを削減します。
対照的に、2 番目のクエリには「company」条件が後ろにリストされています。 OR条件。その結果、MySQL は最初に OR 条件を実行し、より多くの行を処理し、必要に応じて一時インデックスを作成する可能性があります。この追加のインデックス作成手順により、クエリのオーバーヘッドが増加する可能性があります。
短絡とパフォーマンスへの影響
場合によっては、WHERE 句の条件の順序もパフォーマンスに影響を与える可能性があることに注意することが重要です。ショートが発生している場所。条件が true と評価されると、MySQL は後続の条件の評価をバイパスして、直ちに条件全体に対して true を返します。
たとえば、次のクエリを考えてみましょう。
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
If " myint >= 3" が特定の行に対して true と評価されると、MySQL は時間のかかる操作である "myslowfunction" 呼び出しを実行しません。ただし、「myslowfunction」が OR 条件の左側にある場合、「myint >= 3」条件を満たさない行も含め、すべての行に対して実行されます。
結論
通常、WHERE 句の条件の順序によるパフォーマンスへの影響は最小限ですが、1 つの条件によって結果が大幅に絞り込まれる場合には要因となる可能性があります。設置されているか、短絡が発生している場所。 WHERE 句の先頭の方に、より制限的な条件を配置すると、クエリのパフォーマンスと効率が向上する可能性があります。
以上がWHERE 句の条件の順序は MySQL クエリのパフォーマンスにどのように影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。