나는 다음과 같은 테이블 구조했습니다 -SQL Server : 디자인 : 포함 Select 문 또는 INNER JOIN?
사이트 : 마스터 tablefor 사이트
조직 : 조직
에 대한 마스터 테이블을사용자 : 사용자에 대한 마스터 테이블 (각 사용자 고유 한 조직에 대한 링크 : User.OrgId)
OrgSite : 일부 '조직 고유'사이트 정보 (OrgId, SiteId, SiteName, SiteCode)를 저장하십시오. 모든 사이트가 아니라 Org.
UserSite : 사용자를 액세스 할 수있는 사이트 (UserId, SiteId)에 링크하십시오. 사용자가 Org UserSite에 연결되어 있으므로 은 OrgSite 테이블의 하위 집합이됩니다. 일부 항목 & 사이트의 특정 세부 사항 (항목 ID, SiteId, OrgId, ...) 이제
, i를 'ItemSite'에서 \ 디스플레이 레코드를 필터링 할했습니다를 저장하는 테이블 :
는을 ItemSite 그리고 Sitecode를 표시해야합니다. - 이것은 'OrgSite'테이블에서 사용할 수있는 모든 조직의 특정 세부 사항에 나에게 액세스 권한을 부여합니다 vw_ItemSite_UserSite_OrgSite (INNER이 SiteId의 모든 테이블을 조인) :
1. VIEW 만들기 - 그래서, 나는 다음과 같은 두 가지 옵션 참조 (즉 Sitecode를, 등)
내가 포함하도록했습니다 알 수 없다면 'OrgSite'나는 조직 특정 Sitecode를 & 사이트 이름을 원하는 때문 뷰입니다. UserSite는 이미 사이트를 필터링하기 위해 이므로 - 은 OrgSite 테이블을 '제외'하고 은 불필요한 내부 조인을 제거 할 수 있습니다. -
위의 노트을 바탕으로 는
2. 두 번째 옵션은 VIEW를 만드는 것입니다 다음 내가 좋아하는 다음 SELECT를 포함 할 수있는 VIEW의 문을 'SELECT'vw_ItemSite_UserSite과에 -
CREATE VIEW vw_ItemSite_UserSite AS
SELECT ItemSite.SiteID,
(SELECT TOP 1 [SiteCode] FROM OrgSite WHERE OrgId = ItemSite.OrgId) AS SiteCode,
...
FROM ItemSite INNER JOIN UserSite ON ItemSite.SiteId = UserSite.SiteId
나의 유일한 의도는 - 나는 INNER JOIN과 WHERE가 임베디드 select 문의 평가 전에 평가 될 것이라고 생각합니다. 그렇다면 성능이 어느 정도 떨어질까요? 아니면 vw_ItemSite_UserSite_OrgSite를 사용하는 것이 좋습니다.
옵션 # 1 또는 옵션 # 2?
고맙습니다.
그렇다면 옵션 # 1과 옵션 # 2는 모두 성능 관점과 비슷합니까? 분명히 옵션 # 1이 훨씬 간단하고 직선으로 선택되기 때문에! –
나는 어느 쪽이 더 좋다는 것을 말하지 않는다. 내가 말하는 것은 단지 몇 가지 테스트를 실행하고 볼 수 있습니다. 당신의 경우에 이것을하기위한 테스트를 설정하는 것이 얼마나 힘들겠습니까? 무언가가 어떻게 수행되는지에 대한 가장 좋은 지표는 테스트를 실행하고 결과에 따라 결론을 내리는 것입니다. 저는 항상 누군가가 옵션 1이나 옵션 n이 진짜 어려운 사실이없는 최선의 선택이라고 말하면서 매우 겁이납니다. – Kuberchaun