2013-04-03 4 views
0

SQLServer 2005 удалить запрос с присоединитьсяSQLServer 2005 удалить запрос с присоединиться

Я следующий запрос с удаляет запись, есть некоторые вещи в этом запросе мы можем оптимизировать? используется способ удаления записи с соединением? любое удаление служебных данных с помощью записей соединения?

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' 

ответ

1

Нет, нет каких-либо особых накладных расходов с использованием JOIN в ВЕЬЕТЕ. Оба запроса довольно просты, и у них мало места для оптимизации. Если производительность не хватает, попробуйте добавить индексы в столбцы ищутся (INQUIRY_MATCH.INQUIRY_MATCH_ID, INQUIRY_MATCH.BATCH_ID, BATCH_SCORE.BATCH_ID)

Индекс по INQUIRY_MATCH.CURRENT_STATE не может помочь в зависимости от того, как много различных значений есть в этом столбце , Общее эмпирическое правило состоит в том, что MSSQL не будет использовать индекс, если не будет избирательно 5% (например, 20 различных значений равномерно распределены). Это правило, вероятно, полностью исключает индексацию BATCH_SCORE.PERMANENT_BATCH, поскольку я предполагаю, что он содержит только значения «N» и «Y».

+0

В столбце CURRENT_STATE уже есть индекс –

+0

На всякий случай, если вы не поймали мой смысл, важными важными индексами являются те, что указаны в BATCH_ID (в обеих таблицах) и INQUIRY_MATCH_ID. Индекс на CURRENT_STATE * может * помочь, но не так сильно, как другие. –

+0

спасибо, что Адам получил вашу мысль. –

Смежные вопросы