2017-10-26 6 views
2
  1. SELECT * FROM profile WHERE id IN (1,2,3...)を使用して、ResultSetですべての結果を取得します。リクエストがDBは多くの時間を要し送っているので、我々はDBを訪問する回数を減らす必要があり、私の知る限り考慮するとして foreach(int id: ids) {execute(SELECT * FROM profile WHERE id='i')}どこで(a、b、c ...)またはWHERE = inループですか?

:それは私たちのようなループを記述本質的

  • SELECT * FROM profile WHERE id='1' OR id='2' OR id='3'...ですので、最初の方法が優れています。しかし、業界で真実なのかどうかは分かりませんが、より良い解決策があります。私に教えてください、ありがとう:)

  • +0

    セキュリティ上の理由から、実際にはループを使用する必要がありますが、PDOコンテキストで使用する必要があります。 – Strawberry

    +2

    これは実際にあなたのユースケースに依存します。一般的に、IN()は書くのが簡単で、dbのオーバーヘッドが少ないのは1つの質問だけです。 @Strawberryでは、実際にはPDOのコンテキストでは安全ですが、セキュリティで保護されているかどうかはループであるかどうかは関係ありません。 – marekful

    +0

    @marekfulよく準備されたステートメントでIN()を使用するのが難しいためですが、巧妙なハックがあることがわかります – Strawberry

    答えて

    1

    パフォーマンスの観点から、WHERE IN (...)を使用して最初のクエリがここに行くのが好ましい方法です。あなたとコメントが指摘しているように、PHPからのループで多くのクエリを呼び出すのは大きな負担があります。なぜなら、DBへの新しい呼び出しのたびにネットワーク時間がかかるからです。さらに、MySQLは内部的にWHERE IN節を最適化することができます。たとえば、高速検索を可能にするIN値のマップを作成できます。理想的なケースでは、WHERE INを使用して単一のクエリを作成すると、単一の値を検索するよりもずっと悪くならない場合があります。

    関連する問題