Vì bạn đang sử dụng LIKE '%abc%'
, câu lệnh cập nhật sẽ yêu cầu quét toàn bộ bảng. Trong trường hợp đó, kết hợp hai câu lệnh sẽ cải thiện hiệu suất tổng thể. Tuy nhiên, trong đề xuất của bạn, mọi hàng đều được cập nhật và hầu hết chúng đều được cập nhật mà không bị thay đổi (giá trị column1 được thay thế bằng giá trị column1).
Bạn muốn đảm bảo rằng bạn giữ WHERE
để chỉ những hàng thực sự cần thay đổi được thay đổi. Việc ghi vào đĩa không cần thiết này sẽ chậm hơn so với việc kiểm tra xem hàng có khớp với tiêu chí hay không.
Thực hiện điều này:
UPDATE table1
SET column1 =
CASE
WHEN column1 LIKE '%abc%' THEN REPLACE(column1, 'abc', 'abc1')
WHEN column1 LIKE '%def%' THEN REPLACE(column1, 'def', 'def1')
END
WHERE column1 LIKE '%abc%' OR column1 LIKE '%def%';