MySQL クエリの単一値には「IN」または「=」を使用する必要がありますか?

Linda Hamilton
リリース: 2024-11-01 00:05:28
オリジナル
358 人が閲覧しました

Should You Use

MySQL のパフォーマンス: 単一値の "IN" 句と等号演算子の再検討

MySQL では、" IN" 句と単一値の等号演算子は議論の対象となっています。違いはないと主張する人もいますが、適切な演算子を選択する前に値の数をチェックすることでパフォーマンス上の利点が得られる可能性があると提案する人もいます。

単一値の "IN" と "= を比較する

この質問では、単一の値に対して "IN" 句を使用する場合と等号演算子を使用する場合の潜在的なパフォーマンスの違いを調査します。このシナリオには、PHP で構築された動的 SQL ステートメントが含まれます。配列 $object_ids には、単一の値を表す数値が保持されます。

$sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';
ログイン後にコピー

別のオプションとして、どの演算子を使用するかを決定する前に $object_ids の数を確認することもできます。 use:

if(count($object_ids) == 1) {
    $sql = 'SELECT * FROM `users` WHERE `id` = ' . array_shift($object_ids);
} else {
    $sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';
}
ログイン後にコピー

経験的証拠

パフォーマンスへの影響を評価するために、3 つの同様のクエリに対して EXPLAIN 分析が実行されました。1 つは "= 1"、もう 1 つは "= 1" です。 「IN(1)」と「IN(1,2,3)」を含むもの。その結果、

  • MySQL は、このタイプのクエリでは "IN(1)" が "= 1" と同等になるように最適化していることがわかりました。

結論

EXPLAIN の結果によると、値の数をチェックすることによるパフォーマンスの低下は、MySQL が "IN(1)" に対して実行する最適化によって補われるようです。したがって、単一の値を持つ単純なクエリの場合は、一般に等号演算子ではなく「IN」句を使用することをお勧めします。

ただし、MySQL の特定のドキュメントを参照し、次の点を考慮することを常にお勧めします。最終的な決定を下す前に、クエリの複雑さを確認してください。

以上がMySQL クエリの単一値には「IN」または「=」を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート