2012-04-21 3 views
1

MySQL(PHPを使用した方が効率的ですか? SELECT 2つの別個のステートメント、UNIONを1つにするか、あるいはCREATEというオンラインで、SELECT INTOのMySQLに相当する一時テーブルを作成していましたか?それともあなたが考えることができる何か?2つのSELECT文とUNIONの性能/効率とMySQL-PHPの他のものとの比較

結果はPHPスクリプトで使用されます。

クエリ:

  • 最初SELECT常に10行、何で4列を生成します(さんがそれクエリAを呼びましょう)。
  • 2番目のSELECT(クエリB)は、何時でも1行4列を生成します。

シナリオ:私は2つの文をSELECT場合

  • は、IクエリBを繰り返す場合にのみQuery A[0]->Col1 > 0:+ PHP処理2 dBのクエリの総数。
  • クエリBが最初の行(Query C[0]がクエリB)であり、クエリAが行2〜11(Query C[1..10]がクエリA)になるようにクエリCに2つのステートメントを挿入すると、行2〜11の場合Query C[0]->Col1 > 0:合計1dbのクエリ+ PHP処理。

非negotiables:

  • 私がどんなクエリAを反復処理しないことがあります。 UNION操作価値が1つの以下SELECTクエリが
  • クエリAの反復は、クエリB.

の値に依存しますか?これにはより効率的な/より良い練習/コストの低い解決策がありますか?私はここで行方不明の何か?前もって感謝します。

+3

私は、合計11行しか返さない2つのクエリを最適化することに大きな価値があると疑っています... – mellamokb

+0

hmm .. 'UNION'クエリで単一の' mysql_result'を起動し、結果の合計行がちょうど11のときに2つの 'mysql_result'を起動するのに大きな違いはありませんか?あなたが私が行くことを示唆している最後には、次に?ありがとう、@ mellamokb –

答えて

3

これは、環境と管理方法に完全に依存します。私は言いたいことがあります。サーバーが地球の反対側にある別のネットワーク上にある場合、ネットワークがボトルネックになります。
より良い呼び出しをするために、私はいくつかの前提を設けています。サーバーはlocalhost上にあり、接続は適切に管理されており、最適化すべきクエリ自体です。それはあなたのためのケースならhereが説明したように、あなたは、使用Explainコマンドを使用することができ、非常に簡単です:

Explain select col1 from table1 Union select col2 from table2 

Explainを使用する方法をあなたのための説明にそこの記事のトンがあります。 hereは1です。

最後に1つ重要なのは、行の数だけではありません。また、選択コードが何回実行されているかが重要です。各実行で11行を返し、1000の反復を持つループがあるとします。各反復で行が異なると仮定すると、接続管理とキャッシュの効果が分かります。

+0

今それはそれのようなものです。はい、これは標準的な展開のためのものであり、幻想的なものではありません。あなたに感謝します。この特定のWebアプリでは、ページごとに1回だけ呼び出されます。ただし、ページが呼び出される回数は確実に拡大する必要があります。私はそれを提供しなければならないgoodyの良さを説明して調べるでしょう。どうもありがとう!最終的に何をすべきかを決めると、この質問が更新されます。あなたは岩、@Jermin –

+0

助けてうれしいです。 –

+0

kだから、私はUNIONを使い終わった。ページリクエストのスケーリングにはそれほど価値があります。 –