Медленный SQL-запрос на большой базе данных - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующий запрос SQL, чтобы найти данные, которых нет в другой таблице, и из-за последовательностей замены их выполнение занимает более 35 минут?

DECLARE @p0 NVarChar(4) = 'UUID'
DECLARE @p1 NVarChar(1) = ''
DECLARE @p2 NVarChar(1) = 'p'
DECLARE @p3 NVarChar(1) = ''
DECLARE @p4 NVarChar(4) = 'UUID'
DECLARE @p5 NVarChar(1) = ''
DECLARE @p6 NVarChar(1) = 'p'
DECLARE @p7 NVarChar(1) = ''

SELECT 
    u.ProductUUID, u.id, c.id, c.MappingUUID
FROM 
    dbo.Product_Data u
LEFT OUTER JOIN 
    dbo.Mapping_Data c ON REPLACE(REPLACE(c.MappingUUID, @p0, @p1), @p2, @p3) = REPLACE(REPLACE(u.ProductUUID, @p4, @p5), @p6, @p7)
WHERE 
    c.GN_Paid IS NULL

Операторы 2x replace потому чтодвух разных префиксов, которые могут встречаться между двумя таблицами:

Таблица 1:

UUID0000000000165019

Таблица 2:

i00165019

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

Заранее большое спасибо

1 Ответ

0 голосов
/ 31 октября 2019

ОК. Спасибо тем, кто откликнулся, поскольку это было полезно при указании медленных областей.

Мне удалось переместить это в linq с помощью linqpad и рефакторинга, который теперь возвращает правильные результаты в течение 15 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...