【问题标题】:SQL Select query Performance improvementSQL Select 查询性能提升
【发布时间】:2015-05-23 05:39:25
【问题描述】:

我有一堆这样的查询:

-- get all data that exists in source but not yet in destination
SELECT 
*
INTO #temp
FROM source T010T
WHERE NOT EXISTS
                (
                SELECT TOP 1 1 FROM destination P510T
                WHERE WH_CD = T010T.WH_CD  
                AND   POS_NO = T010T.POS_NO 
                AND   SLIP_NO = T010T.TRAN_NO
                AND   OPE_DATE = T010T.SL_REC_DATE 
                ) 
-- process the data 
....
-- insert data into destination 
Insert into destination select * From #temp

我想知道这种方法会影响性能吗?因为我没有要测试的真实数据,而且这是在本地运行的,所以我有点害怕当投入到现实中时,这些查询将是 a@@ 中的痛苦!

有没有更好的选择?

p/s : 比较中使用的两个表的列都是主键primarykey(wh_cd,pos_no,slip_no,ope_date) ...

【问题讨论】:

  • 将前 11 名替换为 *
  • @GiorgiNakeuri 用1 代替* 怎么样?顺便说一句,如果使用*,它应该类似于:where wh_Cd+pos_no+.. not in ( select wh_Cd+pos_no+.. from source)
  • 否 * 与 1 或 6 或 'blabla' 相同。如果表中有 ro,则不需要 top 到现在。这可能会影响性能。

标签: performance sql-server-2012 projection


【解决方案1】:

改用Left Join

SELECT 
*
INTO #temp
FROM source T010T
LEFT JOIN destination P510T
                ON    WH_CD = T010T.WH_CD  
                AND   POS_NO = T010T.POS_NO 
                AND   SLIP_NO = T010T.TRAN_NO
                AND   OPE_DATE = T010T.SL_REC_DATE 
WHERE P510T.WH_CD IS NULL

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 2021-08-14
    • 2014-04-02
    • 1970-01-01
    • 2014-03-23
    • 2016-03-24
    • 2016-03-23
    • 2020-02-08
    相关资源
    最近更新 更多