Sqlserver 2005删除带有join的查询



Sqlserver 2005 delete query with join

我有以下查询删除记录,有一些东西在这个查询我们可以优化?使用连接删除记录的方式是完美的?使用连接记录删除是否有开销?

DELETE BATCH_SCORE
    FROM BATCH_SCORE BS JOIN INQUIRY_MATCH IM ON BS.BATCH_ID = IM.BATCH_ID AND IM.INQUIRY_MATCH_ID = #inquiryMatchId#
    WHERE NOT EXISTS (SELECT TOP 1 1 FROM INQUIRY_MATCH WHERE BATCH_ID = BS.BATCH_ID AND CURRENT_STATE IN ('OPN','RVW',
    'ASN', 'ESC', 'PND')) AND BS.PERMANENT_BATCH = 'N'

我写的新查询如下,新查询比上面的查询好吗

 DELETE
    BATCH_SCORE
FROM
    BATCH_SCORE BS
WHERE
    NOT EXISTS (
SELECT
    TOP 1 1
FROM
    INQUIRY_MATCH
WHERE
    INQUIRY_MATCH_ID = 1011 AND
    BATCH_ID = BS.BATCH_ID AND
    CURRENT_STATE IN ('OPN',
    'RVW',
    'ASN',
    'ESC',
    'PND')) AND
    BS.PERMANENT_BATCH = 'N'

不,在DELETE语句中使用JOIN没有特别的开销。这两个查询都相当简单,几乎没有优化的余地。如果性能不足,请尝试为正在搜索的列添加索引(INQUIRY_MATCH)。INQUIRY_MATCH_ID INQUIRY_MATCH。BATCH_ID BATCH_SCORE.BATCH_ID)

查询y_match上的索引。CURRENT_STATE可能没有帮助,这取决于该列中有多少不同的值。一般的经验法则是,MSSQL不会选择使用索引,除非有大约5%的选择性(例如20个不同的值均匀分布)。这个准则可能完全排除了对BATCH_SCORE建立索引的可能性。PERMANENT_BATCH,因为我猜它只包含'N'和'Y'值。

最新更新