【发布时间】:2014-04-10 23:49:40
【问题描述】:
我想获得有关优化下面查询的帮助。
我希望有一个可以跨年公开员工数据的视图。此视图包含员工表中的数据,其中员工 ID、年份和员工人口统计数据作为列。我还有一个名为 testemployees 的表,其中包含 EmployeeID 和 Year。这是雇员表的一个子集,可能有也可能没有数据。我想要完成的是:
如果 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
让我知道您对如何优化查询的想法。使用任何其他类型的连接会有所帮助吗?
提前致谢。
【问题讨论】:
-
您没有提到表上的任何索引。如果有,请包括索引的类型(集群/非集群、唯一等)以及索引中包含的行。您能否还指定您正在运行的 SAP Sybase ASE 的版本
-
@MichaelGardner 你好!我在主键列上使用了聚集索引。我有一个关于 Year 和 EmployeeID 组合的索引。我正在使用 Sybase ASE 11/12/15 TDS 5.5。这是你要问的吗?提前感谢您的帮助!
标签: select join views query-optimization sap-ase