ホームページ > バックエンド開発 > PHPチュートリアル > 条件の数が非常に多い場合に、SQL の記述で where.in 条件句を置き換えるより良い方法は何ですか?

条件の数が非常に多い場合に、SQL の記述で where.in 条件句を置き換えるより良い方法は何ですか?

WBOY
リリース: 2016-06-13 13:17:39
オリジナル
1554 人が閲覧しました

条件の数が非常に多い場合に、SQL ステートメントの where...in 条件句を置き換えるより良い方法は何ですか?
SQL ステートメントの where 条件が where id in (1,2,3,4,8,11,23,56,89,110,...) の場合、つまり in の数が非常に大きい場合、この種の SQL ステートメントは非常に劣っているので、この問題を解決するには他にどのようなより良い方法が使用されますか?

-----解決策---------
クエリ内で ID を分割し、最後にそれらをマージします。
------解決策----------------------
select * from x where id=1 Union all select * from x where id=2 Union all ...
-----解決策---------
これは良いです。
------解決策---------
リストにある ID を教えていただけますか? あなたはここにいますか?
------解決策---------
それなら、劣った SQL ステートメントの問題ではありません、10,000 個の id 値を渡すことが許可されているのに、なぜこれらの 10,000 個の id 値を含む in 句が劣っていると言えるのでしょうか?
------解決策----------------------
それで、受信したIDグループを入れるべきだと思いますか?まずそれをテーブルに保存してから、関連するクエリを実行する方が賢明ではないでしょうか?
------解決策---------
または、受信 ID グループを走査します。ループ内で 1 つずつクエリを実行する方が賢明でしょうか?
------解決策---------

話し合う

それとも、受信 ID グループを走査してループ内で 1 つずつクエリする方が賢明でしょうか?

------解決策---------
ご興味がございましたら、このブログをお読みください
http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/

ただし、ブログの最後で述べたように


ID が数個または数十個しかない場合は、この違いを考慮する必要はないと思います。

1 階と 2 階を別々にクエリすることはお勧めできません。MySQL の内部処理はおそらくそれより悪くないからです...




議論
SQL ステートメントの where 条件が where id in (1,2,3,4,8,11,23,56,89,110,...) である場合、つまり、in の数が非常に大きい場合です。現時点で、この種の SQL ステートメントは非常に劣悪です。この問題を解決するには、他にどのようなより良い方法があるでしょうか?

------解決策---------
上の階の意見に同意、IN は数、数十人だけID (または数百) を使用しても、それほど効率が低下するわけではありません。そうでない場合、他に何か良いアイデアはありますか?
------解決策---------
話し合う

私もあなたに同意します。ほんの数、数十 (あるいは数百) の IN ID はそれほど非効率的ではありません。そうでない場合、他に何か良いアイデアはありますか?

------解決策---------
話し合う
リスト内の ID がどこから来たのか教えていただけますか?

------解決策---------
話し合う

引用:
あなたのリストの ID がどこから来たのか教えてもらえますか?

これが問題の核心だと思います。可能であれば、最初にこの一連の ID を取得した SQL ステートメントと、後で実装される SQL ステートメントを組み合わせて、関連するクエリを実行します。

この ID のグループが特定の SQL ステートメントを使用して取得されなかった場合は、ビジネス要件と実装計画を再検討する必要があると思います。「」のような大きなグループをバッチ処理する必要があります。理不尽なID。


――――――――――――――――――――――――――――……

------解決策---------
話し合う
テストしていないのですが、共同クエリの方が優れているということでしょうか?

------解決策----------------------
ねえ、私が投稿したブログを読んでいませんでしたか上記は? ...つまり、一時テーブルを挿入してクエリを結合します... データが大きい場合は、in よりも高速です。

Discussion

引用: 🎜>引用:
あなたのリストの ID がどこから来たのか教えていただけますか?

これが問題の核心だと思います。可能であれば、最初にこの一連の ID を取得した SQL ステートメントと、後で実装される SQL ステートメントを組み合わせて、関連するクエリを実行します。

この ID のグループが特定の SQL ステートメントを使用して取得されなかった場合は、ビジネス要件と実装計画を再検討する必要があると思います。「」のような大きなグループをバッチ処理する必要があります。理不尽なID。


―――――――――――――


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