У меня есть следующий запрос, который выполняет левое соединение между 3 таблицами. Проблема в том, что для запуска требуется 20 секунд, даже если возвращается только несколько строк. Если я оставлю «большие поля» из таблицы предложений, запрос выполняется почти мгновенно. Таким образом, кажется, что проблема в том, что по какой-то причине sqlserver извлекает значения этих полей, прежде чем применять оператор where. Есть ли способ ускорить выполнение этого запроса?Медленное двойное левое соединение
SELECT N0."OID"
,N1."FirstName"
,N1."LastName"
,N0."SmallField"
,N0."LargeField1"
,N0."LargeField2"
FROM (
(
"dbo"."Offer" N0 LEFT JOIN "dbo"."Address" N1 ON (N0."OfferDeliveryAddress" = N1."OID")
) LEFT JOIN "dbo"."Customer" N2 ON (N0."Customer" = N2."OID")
)
WHERE (
N0."GCRecord" IS NULL
AND (
(isnull(CharIndex('John Smith', N2."FirstName" + ' ' + N2."LastName"), 0) > 0)
OR (isnull(CharIndex('John Smith', N2."LastName" + ' ' + N2."FirstName"), 0) > 0)
OR (isnull(CharIndex('John Smith', N2."FirstName"), 0) > 0)
OR (isnull(CharIndex('John Smith', N2."LastName"), 0) > 0)
)
)
Возможно, это медленный не из-за объединений, а в ваш сложный вопрос, где статья –
Не могли бы вы создать sql-скрипку, это даст людям возможность взглянуть на «образцовые» данные, план выполнения и сможет предоставить решения –
Измените LEFT JOIN на клиенте в INNER JOIN, ваша WHERE CLAUSE будет исключать все, у кого нет записи в Клиенте. Попробуйте это как ваше условие: CharIndex ('John Smith', COALESCE ([N2]. [FirstName], '') + '' + COALESCE ([2]. [LastName], ''))> 0 –