2016-03-21 5 views
2

私たちは皆、アプリ側でWHEREフィルタリングを使用する方がパフォーマンスが優れていることを知っています。しかし、PostgreSQLの関数をアプリケーションコードよりも効率的に使うことはできますか?それは本当に価値がある、array = [1, 2, NULL] ...PostgreSQLの機能は一般的にコードより高速ですか?

array_remove(array, NULL)

result = SQL.execute(array); result.remove_null_values()

私はとにかくアプリでコードを実行する必要が前提として説明

:ここでは参考例ですすべての単一コードをSQLに移行するには?のように、主要なパフォーマンスを得る(> 10%)。

+0

条件のフィールドにインデックスを使用しようとしましたか? –

答えて

1

これはトレードオフです。データベースで仕事をするということは、ネットワーク経由で送ることが少ないということは、おそらく勝利でしょう。しかし、通常、アプリケーションは水平方向に拡大し、データベースは垂直方向に拡大するので、データベースに多くの作業を加えると後で問題が発生する可能性があることに注意してください。

+2

真実ですが、私はCPUバインドされたデータベースを見たことがありません。仕事でハンマーを掛け、すべてのデータがメモリに収まらない限りです。だから*一般的に言えば、データに近づけば近づくほど良いことでしょう。それが重要な場合は、ベンチマークしてください。データベースの中で何かをすることが意味をなさないケースは、それがデータの問題である場合です。 IE:設定に基づいて多数のデータを動的に取得する必要がある場合、ストアドプロシージャは個々のアプリのクエリよりも確かに優れています。 (単一の大規模なクエリが高速である場合とそうでない場合があります) –

+0

私はほぼ100%に同意します。 :-)私たちのほとんどにとって、スケーラビリティは単なる技術的なものです。 –

+0

@ jim-nasby現在、(これは後で修正されます)私たちはたくさんの結合を持つ巨大なクエリを持っていますので、それは限界に達しています –

1

パフォーマンスが重要な場合は、特定のデータ処理ニーズに応じてプロファイリングする価値があります。

あなたの例では、とにかくNULL値を削除する必要がある場合、Postgresにこれをさせるのが理にかなっています。つまり、アプリケーションに返されるデータが少なくて済むからです。

Postgresに仕事をさせる他の利点には、自分のアプリケーションで維持するコードが少なくて済み、Postgresですでに利用可能なよくテストされたコードを再利用することが含まれます。

関連する問題