Ada dua tabel, Costs
dan Logs
. Data di tabel Costs
bisa jutaan baris, dan di tabel Logs
bisa miliaran baris.
Saya perlu memperbarui kolom CostBy
di tabel Costs
dalam tugas layanan di lingkungan produksi dalam 100 catatan setiap kali dijalankan.
CREATE TABLE Cost
(
C_PK uniqueidentifier primary key not null,
C_CostBy varchar(3) not null
)
CREATE TABLE Logs
(
L_PK uniqueidentifier primary key not null,
L_ParentTable varchar(255) not null, -- Table Cost and other table's name
L_ParentID uniqueidentifier not null, -- Cost's pk and other table's pk
L_Event varchar(3) not null, -- Part are 'ADD' and other event types
L_User varchar(3) not null
)
CREATE NONCLUSTERED INDEX [L_ParentID]
ON [dbo].[Costs] ([L_ParentID] ASC)
Berikut ini pernyataan pembaruan asli:
UPDATE TOP(100) Costs
SET CostBy = ISNULL(L_User, '~UK')
FROM Costs
LEFT JOIN Logs ON L_ParentID = C_PK AND L_Event = 'ADD'
WHERE CostBy = ''
Namun, pernyataan tersebut memperkenalkan masalah kinerja besar-besaran, tingginya biaya pemindaian tabel di Costs
tabel.
Pertanyaan saya adalah bagaimana menghindari pemindaian tabel di tabel Costs
atau bagaimana cara mengoptimalkan pernyataan pembaruan?
Terima kasih sebelumnya.