sql-server-2008 - SQL 查询性能不佳

标签 sql-server-2008 query-performance

我有一个如下所示的查询,在 SQL Server 2008 中执行

SELECT
    ipm.HEORG_REFNO,    
    ipm.HOTYP_REFNO,     
    ipm.CASLT_REFNO,     
    ipm.HOLVL_REFNO,    
    IPM.MAIN_IDENT,  
     ...  
FROM  
    dbo.HEALTH_ORGANISATIONS ipm  (NOLOCK)             
LEFT JOIN
    (SELECT
         s.heorg_refno, min(s.start_dttm) as start_dttm_SPONT, max(isnull(convert(datetime,s.end_dttm,120),convert(datetime,'9999-01-01', 120))) as end_dttm_SPONT    
     FROM
         dbo.service_points s (NOLOCK)    
     INNER JOIN
         dbo.reference_values rfval (NOLOCK) ON s.SPTYP_REFNO = rfval.RFVAL_REFNO    
                                             AND RFVAL.MAIN_CODE != 'PDT'         
     GROUP BY 
         s.heorg_refno) SPONT ON ipm.HEORG_REFNO = SPONT.HEORG_REFNO    

 -- Bring only Health Organisation records and also certain records,whose HOTYP_REFNO does not exist in REF_VALS
WHERE
    NOT EXISTS ((SELECT 'x' 
                 FROM REFERENCE_VALUES RVAL (NOLOCK) 
                 WHERE RVAL.RFVAL_REFNO = ipm.HOTYP_REFNO 
                   AND main_code IN ('011','012','015','016',  '017','019','2','AANDE','AEB','AEC','CLINIC','DAYCC','DEPRT','GPSIT','HC','HOSPL','HOST','LOCTN','LOSYN','MIU','MISC','MRL', 'SITE','THEAT','WARD','PDT','NURHM','DAYCR') 
    or ipm.HEORG_REFNO IN(select distinct HEORG_REFNO from SERVICE_POINT_SESSIONS (NOLOCK) where OWNER_HEORG_REFNO = 2001934 and HEORG_REFNO != 2001934) 
    or ipm.HEORG_REFNO IN (select REFNO from LOR_IPM_SYNTH_STG_DEV..  STAGING_Activity_LOCATION_DCS (NOLOCK) where Sources='HEORG_REFNO' and REFNO != 2001934)  
    )
  )

执行查询需要花费大量时间。

当我评论以下两行时,它运行得更快:

or ipm.HEORG_REFNO IN(select distinct HEORG_REFNO from SERVICE_POINT_SESSIONS (NOLOCK) where OWNER_HEORG_REFNO = 2001934 and HEORG_REFNO != 2001934) 
    or ipm.HEORG_REFNO IN (select REFNO from LOR_IPM_SYNTH_STG_DEV..  STAGING_Activity_LOCATION_DCS (NOLOCK) where Sources='HEORG_REFNO' and REFNO != 2001934)  

感谢您在调整查询时提供的任何指导

最佳答案

我的第一个想法是您的查询非常复杂 - 我会寻找简化它的方法......

In 子句并不总是表现良好 - 我很想将此信息放入禁止的“main_Codes”表变量中,左连接到它并测试 null...

是时候运行执行计划并查看瓶颈实际上在哪里,这取决于您自己的环境(索引、统计等)...

关于sql-server-2008 - SQL 查询性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34610804/

相关文章:

MySQL GROUP BY 将查询速度减慢 1000 倍

Java Hibernate sql server Express 连接错误

sql - 从不完全不同的结果中返回不同的行

sql-server - 此查询的估计成本超出了配置的阈值 ssis

sql - 如何根据SQL Server select语句中的两列值返回一个值?

MySQL选择主键而不是索引

sql - 使用sql server management studio向sql表添加列

sql - Oracle 和 group by 的奇怪行为

sql - PostgreSQL MAX() 内部查询真的很慢

algorithm - Delta E (CIE Lab) 在 SQL 中计算和排序的性能