首页 > 解决方案 > 缓慢插入但快速选择查询

问题描述

带有连接的选择查询在不到 1 秒的时间内返回结果(返回 1000 行:600 毫秒),但插入临时表或物理表需要 15-16 秒。

这些都没有提高性能。

谢谢你们的评论。需要每 5 秒从 Kafka 插入 6000 到 20000 行...


找到了一种解决方法,可以帮助我实现目标周转时间,但不完全知道行为的原因。正如我在问题陈述中提到的,瓶颈是编写将表变量与其他各种表连接到临时表的 select 语句的结果集。我将其放入存储产品中,并将存储过程的执行返回到临时表。现在插入需要不到 1 秒


SELECT  
   i.Id AS IId, 
   df.Id AS dfid,
   MAX(CASE
                 WHEN lp.Value IS NULL and f.pnp = 1 THEN 0
          WHEN lp.Value = 0 and f.tzan = 1 and f.pnp = 0 THEN NULL                                          
          ELSE lp.Value                                          
   END) 'FV',   
   MAX(lp.TS),
   MAX(lp.Eid),
   MAX(0+lp.IsDelayedStream)
   FROM         
     f1 f WITH (NOLOCK)  
     INNER JOIN ft1 ft WITH (NOLOCK)  ON f.FeedTypeId = ft.Id         
     INNER JOIN FeedDataField fdf WITH (NOLOCK)        
      ON fdf.FeedId = f.Id        
     INNER JOIN df1 df WITH (NOLOCK)     
      ON fdf.dfId = df.Id        
     INNER JOIN ds1 ds  WITH (NOLOCK)    
      ON df.dsid = ds.Id        
     INNER JOIN dp1 dp  WITH (NOLOCK)  
      ON ds.dpId = dp.Id  
     INNER JOIN dc1 dc WITH (NOLOCK)  
      ON dc.dcId = ds.dcId      
     INNER JOIN i1 i  WITH (NOLOCK)  
      ON f.iId = I.Id 
     INNER JOIN id1 id WITH (NOLOCK)  
      ON id.iId = i.Id
     INNER JOIN IdentifierType it WITH (NOLOCK)  
      ON id.ItId = it.Id    
     INNER JOIN ivw_Tdf tdf WITH(NOEXPAND)  
      ON tdf.iId = i.Id 
     INNER JOIN z.dbo.[tlp] lp
      ON lp.Ticker = id.Name AND lp.Field = df.SourceName AND 
      lp.Contributor = dc.Name AND lp.YellowKey = tdf.TextValue
      WHERE         
        ft.Name in ('X', 'Y') AND f.SA = 1        
AND dp.Name = 'B' AND (i.Inactive IS NULL OR i.Inactive = 0)        
AND it.Name = 'T' AND id.ValidTo = @InfinityDate         
AND tdf.SourceName = 'MSD'        
AND tdf.ValidTo = @Infinity
GROUP BY i.Id, df.Id
OPTION(MAXDOP 4, OPTIMIZE FOR (@Infinity = '9999-12-31 23:59:59', 
@InfinityDate = '9999-12-31))

标签: sqlsql-server

解决方案


推荐阅读