Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Актуализиране на 4 милиона записа в SQL сървър, използвайки списък с идентификатори на записи като вход

Най-добрият начин да подходите към това запитване е като вмъкнете 4 милиона записа в таблица. Всъщност можете да ги поставите в таблица с колона за самоличност чрез „групово вмъкване“ в изглед.

create table TheIds (rownum int identity(1,1), id int);

create view v_TheIds (select id from TheIds);

bulk insert into v_TheIds . . .

С всички данни в базата данни сега имате много повече възможности. Опитайте актуализацията:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id)

Трябва също така да създадете индекс на TheIds(id) .

Това е голяма актуализация, която се изпълнява като една транзакция. Това може да има лошо въздействие върху производителността и да започне да запълва регистрационния файл. Можете да го разделите на по-малки транзакции, като използвате rownum колона:

update t
    set booleanfield = 1
    where exists (select 1 from TheIds where TheIds.id = t.id and TheIds.rownum < 1000)

Клаузата за съществуване тук прави еквивалента на left outer join . Основната разлика е, че този синтаксис на корелирана подзаявка трябва да работи в други бази данни, където присъединяванията с актуализации са специфични за базата данни.

С rownum можете да изберете толкова редове, колкото желаете за актуализацията. Така че можете да поставите актуализацията в цикъл, ако цялостната актуализация е твърде голяма:

where rownum < 100000
where rownum between 100000 and 199999
where rownum between 200000 and 299999

и така нататък. Не е нужно да правите това, но можете, ако искате да групирате актуализациите по някаква причина.

Основната идея е да получите списъка с идентификатори в таблица в базата данни, така че да можете да използвате силата на базата данни за следващите операции.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Транспониране на колони в редове с помощта на UNPIVOT

  2. Обединени колони вертикално в SQL

  3. Как да актуализирате голяма таблица с милиони редове в SQL Server?

  4. Идентификационните данни за услугата SQL Server Agent са невалидни

  5. TSQL CASE с if сравнение в израза SELECT