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..] 

또는보다 느린

매에 (여부) 스키마를 지정 제안 할 수있는 몇 가지 다른 의미가있는 경우 질문.

몇 가지 (실제로는 거의없는) 테스트를 수행했으며 속도 측면에서 어떤 차이점도 볼 수 없습니다.

답변

2

두 번째 것은 빠르지 만 간신히. SET은 매우 저렴합니다.
일반적으로 스키마 정규화 된 테이블 이름은 시스템 카탈로그에 대한 쿼리가보다 구체적 일 수 있기 때문에 약간 더 빠를 가능성이 있습니다. 그러나 당신은 그것을 측정 할 수 없을 것입니다. 성능면에서는 중요하지 않습니다.

search_path을 설정하면 보안 및 편의성에 영향을 미칩니다. 일반적으로 좋은 생각입니다.
예를 들어, "Writing SECURITY DEFINER Functions Safely"의 설명서에있는 조언을 고려하십시오.

many ways to set the search_path이 있습니까?

+0

anwser에게 감사드립니다! 'role' 당 search_path를 설정하는 것이 가능하다는 것을 몰랐습니다. 매우 유용합니다! – Strae

0

모든 실제적인 목적을 위해 이것은 측정 가능한 차이를 만들어야합니다.

측정 가능한 차이가 경우, 나는 시스템이 가지고 추측 할

  • 매우 많은 스키마 항목 (수백) 및/또는 관계의
  • 극단적 인 번호로 search_path (관계 카탈로그가 정상적인 워크로드에 대해 메모리에 맞지 않는 경우가 많습니다).

이 경우 분명히 스키마 이름을 정규화하는 것 이외의 문제가 있습니다.