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'值。