Thứ Sáu, 7 tháng 4, 2023

Cải thiện tốc độ khi update vào table có dữ liệu quá lớn.

Khi update một bảng có dữ liệu lớn, thường sẽ gặp phải vấn đề về hiệu suất và thời gian thực thi. Để cải thiện hiệu suất của câu lệnh UPDATE, bạn có thể thực hiện các cách sau:

  1. Sử dụng câu lệnh UPDATE với điều kiện WHERE cụ thể: Nếu bạn chỉ muốn cập nhật một phần nhỏ của bảng, hãy sử dụng điều kiện WHERE cụ thể để giới hạn số lượng dòng bị ảnh hưởng bởi câu lệnh UPDATE.
  2. Sử dụng index trên các cột được sử dụng trong điều kiện WHERE: Nếu bảng của bạn có một số lượng lớn các dòng và câu lệnh WHERE dựa trên một hoặc nhiều cột, bạn có thể tăng tốc độ câu lệnh UPDATE bằng cách tạo index trên các cột đó. Việc này sẽ giảm thời gian tìm kiếm trong bảng để tìm các dòng phù hợp với điều kiện WHERE.
  3. Sử dụng cú pháp MERGE: Nếu bạn muốn cập nhật bảng đích từ bảng nguồn, bạn có thể sử dụng câu lệnh MERGE thay vì câu lệnh UPDATE. Cú pháp MERGE cho phép bạn thực hiện nhiều thao tác (cập nhật, chèn, xóa) trong một câu lệnh, giảm thời gian thực thi.
  4. Chia nhỏ câu lệnh UPDATE thành nhiều phần: Nếu bảng của bạn quá lớn, bạn có thể chia câu lệnh UPDATE thành nhiều phần bằng cách sử dụng cấu trúc tập hợp và câu lệnh WHERE. Việc này sẽ giảm tác động lên bảng và giúp tăng tốc độ thực thi câu lệnh.
  5. Tăng kích thước bộ đệm: Nếu máy chủ SQL Server của bạn đang sử dụng bộ đệm có kích thước mặc định, bạn có thể tăng kích thước bộ đệm để giảm thời gian I/O và tăng hiệu suất của các câu lệnh UPDATE.
  6. Nâng cấp phần cứng hoặc thay đổi cấu trúc bảng: Nếu bảng của bạn quá lớn và máy chủ SQL Server của bạn không đủ khả năng để xử lý nó, bạn có thể cân nhắc nâng cấp phần cứng hoặc thay đổi cấu trúc bảng

 

Cú pháp MERGE được sử dụng để thực hiện các hoạt động chèn, cập nhật và xóa trên bảng đích dựa trên các dữ liệu được cung cấp từ bảng nguồn. Câu lệnh MERGE thường được sử dụng để cập nhật hoặc thêm mới các dữ liệu trong một bảng.

Ví dụ, giả sử bạn có hai bảng Sales và SalesUpdate. Bảng Sales chứa các thông tin về các đơn hàng đã được bán, trong khi bảng SalesUpdate chứa các thông tin về các đơn hàng mới nhất đã được cập nhật từ hệ thống bán hàng của bạn. Bạn muốn cập nhật bảng Sales với các thông tin mới nhất từ bảng SalesUpdate.

Câu lệnh MERGE sẽ được sử dụng để thực hiện việc này như sau:

sql
MERGE INTO Sales AS Target 
USING SalesUpdate AS Source 
ON (Target.SalesOrderID = Source.SalesOrderID) 
WHEN MATCHED THEN 
    UPDATE SET Target.ShipDate = Source.ShipDate, Target.TotalDue = Source.TotalDue WHEN NOT MATCHED BY TARGET THEN 
    INSERT (SalesOrderID, OrderDate, DueDate, ShipDate, TotalDue)
    VALUES (Source.SalesOrderID, Source.OrderDate, Source.DueDate, Source.ShipDate, Source.TotalDue);
Trong câu lệnh MERGE này:

Bảng Sales được đặt làm bảng đích (Target), và bảng SalesUpdate được đặt làm bảng nguồn (Source).

Dòng "ON" xác định điều kiện ghép nối giữa bảng đích và bảng nguồn. Trong ví dụ này, các đơn hàng trong Sales sẽ được ghép nối với các đơn hàng trong SalesUpdate dựa trên trường SalesOrderID.

Khi có bất kỳ đơn hàng nào được tìm thấy trong cả hai bảng (MATCHED), thì dòng "WHEN MATCHED" sẽ được thực hiện để cập nhật thông tin của đơn hàng trong bảng Sales với thông tin mới nhất từ bảng SalesUpdate.

Khi không có đơn hàng nào được tìm thấy trong bảng đích (NOT MATCHED BY TARGET), thì dòng "WHEN NOT MATCHED BY TARGET" sẽ được thực hiện để chèn các đơn hàng mới từ bảng SalesUpdate vào bảng Sales.

Lưu ý rằng cú pháp MERGE sẽ chỉ hoạt động trên các phiên bản SQL Server 2008 trở lên.

Không có nhận xét nào: