Запросы с несколькими обновлениями очень медленные
Hi then the query I'm running below works correctly but it is very slow to perform the operations as I can to speed it up? Unfortunately it is a very oneorose query and I have to run it on a server sql 2014 some advice?
UPDATE KilometriCantiereRapportoMobile SET IdRapportoMobile = @IdRapporto WHERE IdKilometri IN (SELECT Kilometri.IdKilometri FROM Kilometri INNER JOIN KilometriCantiereRapportoMobile ON Kilometri.IdKilometri = KilometriCantiereRapportoMobile.IdKilometri WHERE KilometriCantiereRapportoMobile.IdRapportoMobile IS NULL AND CONVERT(varchar(10), @Data, 105) = CONVERT(varchar(10), Kilometri.Data, 105) AND Kilometri.IdCantiere = @IdCantiere AND Kilometri.IdUtenteInserimento = @IdUtente); /*Articoli */ UPDATE ArticoloCantiereRapportoMobile SET IdRapportoMobile = @IdRapporto WHERE IdArticoloCantiere IN (SELECT ArticoloCantiere.IdArticoloCantiere FROM ArticoloCantiere INNER JOIN ArticoloCantiereRapportoMobile ON ArticoloCantiere.IdArticoloCantiere = ArticoloCantiereRapportoMobile.IdArticoloCantiere WHERE ArticoloCantiereRapportoMobile.IdRapportoMobile IS NULL AND CONVERT(varchar(10), @Data, 105) = CONVERT(varchar(10), ArticoloCantiere.Data, 105) AND ArticoloCantiere.IdCantiere = @IdCantiere AND ArticoloCantiere.IdUtente = @IdUtente); /* risorse */ UPDATE RisorsaRapportoMobile SET IdRapportoMobile = @IdRapporto WHERE IdRisorseUmane IN (SELECT RisorseUmane.IdRisorseUmane FROM RisorsaRapportoMobile INNER JOIN RisorseUmane ON RisorseUmane.IdRisorseUmane = RisorsaRapportoMobile.IdRisorseUmane WHERE RisorsaRapportoMobile.IdRapportoMobile IS NULL AND CONVERT(varchar(10), @Data, 105) = CONVERT(varchar(10), RisorseUmane.Data, 105) AND RisorseUmane.IdCantiere = @IdCantiere AND RisorseUmane.IdUtenteInserimento = @IdUtente)
Что я уже пробовал:
перезапустить SQL Server
Clifford Nelson
Возможно, было бы неплохо посмотреть на ваши ключи и убедиться, что эти ключи, необходимые для запроса, имеют индексы. Также можно было бы выяснить, как избежать всех этих обращенных, они не могут помочь
#realJSOP
Соединения также убивают вашу производительность.
rikidev
как я могу сделать это внутри join?
MadMyche
Добавляя комментарий Клиффорда, я хотел бы использовать инструмент "план выполнения" в Sql Server, чтобы точно определить, что вас замедляет. Функции преобразования там выглядят как простая дата; я бы сначала убедился, что входные данные находятся в этом формате, и пропустил бы их, или, по крайней мере, назначил бы ему переменную varchar(10) и пропустил бы половину преобразований в каждой отдельной строке по сравнению
Gerry Schmitz
Вы когда-нибудь слышали о "временных столах"? "Секционирование" - это проблема?
Samira Radwan
Я не эксперт по SQL, но, как сказал @Gerry, использование временных таблиц-неплохая идея.
Я вижу, что у вас есть 3 'WHERE field IN', а затем большой оператор SELECT. То, что я мог бы сделать, это использовать временные таблицы для этих select специально, у них есть все виды объединения и преобразования, так что вместо WHERE field IN (SELECT...) это будет WHERE field IN (#tempTable). Затем, когда вы закончите с обновлением, просто отбросьте #tempTable.