2017-09-17 50 views
0

UNIONまたはUNION ALLのいずれかを使用して複数のテーブルから1つの列の外部キーを選択します。UNIONとUNION ALLのパフォーマンス

重複が問題でない場合は、パフォーマンス上の問題としてUNIONの代わりにUNION ALLを使用することをお勧めします。しかし、私のPHPスクリプトの呼び出しでは、ループを繰り返してデータを重複することなく操作する方が効率的です。 1

オプション:

使用:

使用UNIONがデータベースに

オプション2重複を排除するために

だから、私は、次のオプションのいずれかを使用することができますデータベース内のUNION ALLを削除し、array_unique()または他の同様の関数を使用してPHPスクリプト内のデータを削除します。

私は、オプション1が大部分のケースでは、より効率的な方法として推奨されることを前提にしていますが、その仮定をバックアップするものは何もありません。データは何だったのか

ほとんどの場合私の前提は正しいですか?もしそうなら、なぜですか?そうでない場合は、どうしてですか?

+0

両方のオプションをテストすると表示されます。 – Shadow

+0

答えはそれが依存するということです。両方を調べて見つけてください。 –

+0

@TimBiegeleisenあなたはこれを複製物としてリンクしていますが、そのページに私の質問に答えるものは何もありません。それはちょうど私が私の質問に述べたことを繰り返す。 – kojow7

答えて

1

主態様は、このデータベースエンジンと連合ショートカットがUNION DISTINCTするためのものであるので、

ALLを
に関連するUNIONとUNIONとの間の性能の差が明確な結果を得るために必要とすることですクエリオプティマイザ は、アプリケーションでPHPコードに基づくフィルタリングアルゴリズムよりも、確かに効果的で効率的です。

dictinct動作は、さらに、機能別グループのための事前の最適化から利益を

だけでなく、重複データのフィルタリングは、一般的に注文したデータ 選択SQL関数は、明示的な順序付けなしで作業中に、 に基づいていることができますアプリケーションでデータをフィルタリングする必要があると、効率が悪くクエリが長くなる可能性があります。オプション1は、一般的に、より良いチョイス

1

速度面であるので

一般DBエンジンは、アプリケーションPHP関数コードすることをはるかに効率的である、それは比較的軽微であります。 SELECTsのすべてをやる努力は、あなたがそれを行う方法を問わず、デュアップを行うこと以上のものです。

したがって、私はよりもキーストロークが少ないので、UNION DISTINCTと言っておくことをおすすめします。

その他の考慮事項:

  • UNION ALLは、サーバからクライアントに多くのものをシャベルでしょう。これは(極端な状況または遠い状況で)パフォーマンスの要因となる可能性があります。
  • ORDER BYUNIONにも記載している場合は、DISTINCTも行うことができます。
  • GROUP BYUNION上)は、DISTINCTの効果を有する。
  • 何百万行もある場合は、MySQLは本質的に無制限ですが、PHPは配列のメモリ制限に遭遇する可能性があることに留意してください。
+0

UNIONとUNION DISTINCTの違いについて説明できますか?私はUNIONが自動的にDISTINCTを実行したと思った。 – kojow7

+0

'UNION'はUNION DISTINCTに_identical_です。私はあなたが(1)何をすべきかを考えるように、そして(2)あなたが意識して決定したSQL(6ヶ月であなたかもしれない)を次の読者に伝えるように、常にそれを綴じることを勧めます。 –