1

免責事項: これは最適化のためではなく、好奇心からです。

私はこれかどうか疑問に思っています:

SET search_path TO myscheme; -- obviously this is done once per connection
SELECT foo, bar FROM table1 WHERE [..clauses..]

よりもどういうわけか速い/遅い

SELECT foo, bar FROM myscheme.table1 WHERE [..clauses..]

または、すべてのクエリでスキーマを指定する (または指定しない) ことを示唆する可能性のある他の意味がある場合。

私はいくつかの (本当に少数の) テストを行いましたが、速度に関して違いは見られません。

4

2 に答える 2

2

2 番目の方が高速ですが、かろうじてです。SETは非常に安いです。
一般に、スキーマで修飾されたテーブル名は、システム カタログへのクエリがより具体的である可能性があるため、わずかに高速になる可能性があります。しかし、それを測定することはできません。パフォーマンス的には無関係です。

ただし、を設定するsearch_pathと、セキュリティと利便性に影響があります。一般的には良い考えです。
たとえば、「Writing SECURITY DEFINERFunctions Safely」に関するマニュアルのアドバイスを検討してください。

を設定するには多くの方法search_pathがあることをご存知ですか?

于 2013-07-02T16:24:01.937 に答える
0

すべての実用的な目的のために、これは測定可能な違いを生むはずです.

測定可能な違いがある場合は、システムが持っていると思います

  • asearch_path非常に多くのスキーマ エントリ (数百) および/または
  • 極端な数のリレーション (リレーション カタログが通常のワークロードのメモリに収まらないほどの数)。

その場合、スキーマ名を修飾する以外に、間違いなく他の問題があります。

于 2013-07-02T16:24:33.143 に答える