У меня есть переменная таблицы, которую я использую для сбора записей из нескольких таблиц, которые должны быть обработаны позже в моем запросе.Ускоренный SQL УДАЛИТЬ ГДЕ Нужны IN/EXISTS
Это выглядит немного как это:
DECLARE @Prices TABLE (
ProductId INT,
Price MONEY,
Fee INT,
Discount INT,
IsSpecialPrice BIT
)
Теперь, после сбора связанных цен записей из нескольких таблиц (около 400K записей), я должен удалить только несколько записей. Для продуктов, для которых у меня есть как минимум 2 записи (один или несколько с IsSpecialPrice = 0 и один с IsSpecialPrice = 1), мне нужно удалить все записи, где IsSpecialPrice = 0.
Теперь с помощью УДАЛИТЬ ГДЕ И УДАЛИТЬ ГДЕ СУЩЕСТВУЕТСЯ слишком долго, чтобы избавиться от нескольких записей. Итак, я ищу более быстрый тип запроса.
Прямо сейчас это то, что я использую:
DELETE P1
FROM @Prices P1
WHERE P1.IsSpecialPrice = 0 AND EXISTS (SELECT P2.ProductId FROM @Prices P2 WHERE P2.ProductId = P1.ProductId AND P2.IsSpecialPrice = 1)
Я пытался как WHERE IN и WHERE EXISTS, но оба так же медленно.
И какие индексы существуют/пытались ли вы создать, чтобы ускорить процесс? –
С помощью существует почти всегда быстрее выбирать только верхнюю часть 1., потому что вы действительно не заботитесь о результатах только тем, что есть хотя бы один. –
Оптимизаторы запросов делают то же самое –