2014-04-10 2 views
0

아래에서 내 쿼리 최적화에 대한 도움을 받으려합니다.sybase의 조건부 쿼리 최적화

몇 년 동안 직원 데이터를 노출하는보기를 원합니다. 이보기에는 직원 ID, 연도 및 직원 통계가 열인 직원 테이블의 데이터가 있습니다. EmployeeID와 Year가있는 testemployees라는 테이블도 있습니다. 이것은 데이터가 있거나 없을 수도있는 employee 테이블의 서브 세트입니다. 내가 이루고자하는 목표는 다음과 같습니다.

testEmployees 테이블에 데이터가있는 경우 내 뷰는 testEmployees의 직원에 대해서만 직원 정보를 가져 와야하며 testEmployees에 데이터가 없으면 내보기에 직원 테이블의 모든 데이터가 있어야합니다. .

내 직원 테이블은 실제로 매우 크며 아래 쿼리가 작동하더라도이 데이터를 가져 오는 데 많은 시간이 필요합니다. 이 쿼리를 향상시킬 수있는 방법에 대한 정보는 크게 감사하겠습니다.

Create view dbo.employees(Year, EmployeeID) 
as 
select * from 
employee e, testemployees te 
where e.Year = case when((select count(1) from testemployees)>0) then te.Year else e.Year 
and e.employeeID = case when((select count(1) from testemployees)> 0) then te.employeeID else e.employeeID 

쿼리 최적화 방법에 대한 의견을 알려주십시오. 다른 종류의 조인을 사용하면 도움이됩니까?

미리 감사드립니다.

+0

테이블에 인덱스를 언급하지 않았습니다. 보유하고있는 경우 색인의 유형 (클러스터 된/클러스터되지 않은, 고유 한 등) 및 색인에 포함 된 행을 포함하십시오. 실행중인 SAP Sybase ASE의 버전을 지정할 수도 있습니다 –

+0

@MichaelGardner 안녕하세요! 기본 키 열에 클러스터 된 인덱스를 사용했습니다. 올해와 EmployeeID 조합에 대한 색인이 있습니다. Sybase ASE 11/12/15 TDS 5.5를 사용하고 있습니다. 이게 당신이 요구하는 것입니까? 도움에 미리 감사드립니다! – user3358472

답변

0

Sybase에서 근무한 지 오래되었지만 SQL-99 쿼리에 대한 구문 지원이 확실하지 않습니다. 그러나 가정 사이베이스는 SQL-99 구문을 조인 적어도 일부 지원을하고, 다음과 같은 작업을해야합니다 :

Create view dbo.employees(Year, EmployeeID) 
as 
select e.employeeId, e.Year, e.attribute1, e.attribute2, ... e.attributeN, 
     ifnull(te.employeeId, e.employeeId, te.employeeId) as testEmployeeId, 
     ifnull(te.employeeId, e.Year, te.Year) as testYear, 
     ifnull(te.employeeId, e.attribute1, te.attribute1) as testAttribute1, 
     ifnull(te.employeeId, e.attribute2, te.attribute2) as testAttribute2, 
       .... 
     ifnull(te.employeeId, e.attributeN, te.attributeN) as testAttributeN 
from employee e 
left join testemployees te on (e.employeeId = te.employeeId and e.Year = te.Year) 

이 사용자가 정의한 의미에서 다소 차이가 있음을 유의하십시오. 나는 이것이 실제로 어떤 경우에 당신이 원하는 것에 조금 더 가깝다고 생각합니다.