У меня есть база данных SQL Server 2008 с приблизительно 14 миллионами строк. В нем есть две таблицы
Table1
rowId int, primary key
someData1 int
someData2 int...
Table2
id int, primary key
rowId ==> int, refers to the rowId from Table1
someCalculatedData int...
Table2.rowId is not a foreign key, but I did make a Non-clustered, Non-Unique index on it
Когда я импортирую данные, я вставляю все данные в Таблицу1, а затем нахожу строки, в которых нет записи в Таблице2, и вставляю данные в эту таблицу.
Я делал это в пакетном режиме, выбирая 250 000 строк за раз, обрабатывая данные и вставляя их в таблицу 2, а затем находя следующие 250 000 строк и так далее, пока в Таблице 1 не было ни одной строки, в которой нет записей. в таблице 2.
select TOP 250000 rowId from Table1
where NOT EXISTS (select rowId from Table2 where Table1.rowId=Table2.rowId)
Этот запрос действительно замедлился, и теперь для получения следующего пакета требуется более двух минут.
Если я выполню запрос без ключевых слов TOP или SET ROWCOUNT и получу все строки, то запрос вернет результаты через ~ 15 секунд.
Кто-нибудь знает, почему TOP и SET ROWCOUNT приводят к тому, что запрос занимает гораздо больше времени, чем получение всех данных?
Можно ли повысить производительность запроса и при этом каждый раз получать только подмножество данных?