У меня есть запрос, который соединяет две таблицы.TABLE_1
имеет 15 000 строк, а TABLE_2
имеет 50 000 строк.Запрос, очень похожий на этот, выполнялся в прошлом примерно за 10 минут.Теперь он работает бесконечно с той же серверной ситуацией (то есть больше ничего не работает), и очень похожий запрос также выполняется бесконечно.
SELECT A.KEY_1
,A.FULL_TEXT_1
,B.FULL_TEXT_2
,B.KEY_2
,MDS_DB.MDQ.SIMILARITY(A.FULL_TEXT_1,B.FULL_TEXT_2, 2, 0, 0) AS confidence
FROM #TABLE_1 A
CROSS JOIN #TABLE_2 B
WHERE MDS_DB.MDQ.SIMILARITY(A.FULL_TEXT_1,B.FULL_TEXT_2, 2, 0, 0) >= 0.9
Когда я запускаю примерный план выполнения для этого запроса, узел Nested Loops (Inner Join)
оценивается в 96% выполнения.Предполагаемое количество строк составляет 218 миллионов, хотя при перекрестном соединении таблиц должно получиться 15 000 * 50 000 = 750 миллионов строк.Когда я добавляю INSERT INTO #temp_table
в начало запроса, предполагаемый план выполнения помещает Insert Into
в 97% и оценивает количество строк в 218 миллионов.В действительности должно быть менее 100 совпадений, у которых показатель сходства выше 0,9.
Я читал, что большие различия в оценочном и фактическом количестве строк могут повлиять на производительность.Что я могу сделать, чтобы проверить / исправить это?