Sử dụng WHERE converted_at is not null
hoặc WHERE converted = FALSE
có thể sẽ giống nhau về các vấn đề về hiệu suất truy vấn.
Nhưng nếu bạn có trường bit bổ sung này, được sử dụng để lưu trữ xem trường converted_at
có là Null hay không, bạn sẽ phải duy trì tính toàn vẹn (thông qua trình kích hoạt?) Bất cứ khi nào một hàng mới được thêm vào và mỗi lần cột được cập nhật. Vì vậy, đây là một sự bình thường hóa. Và cũng có nghĩa là mã phức tạp hơn. Hơn nữa, bạn sẽ có ít nhất một chỉ mục trên bảng (có nghĩa là một hoạt động Chèn/Cập nhật/Xóa chậm hơn một chút).
Vì vậy, tôi không nghĩ rằng việc thêm trường bit này là tốt.
Nếu bạn có thể thay đổi cột được đề cập từ NULL
thành NOT NULL
(có thể bằng cách bình thường hóa bảng), bạn có thể nhận được một số lợi ích hiệu suất (với chi phí/tăng thêm bảng).
Nguồn
2012-01-25 21:45:48
Tôi không nghĩ rằng có một sự khác biệt hiệu suất đáng kể, nhưng nếu có, thì nó có thể có lợi cho 'không phải là null', vì khi thử nghiệm boolean nó vẫn sẽ muốn tìm hiểu xem nó không phải là null. –
@ MichaelKrelin-hacker: Tôi đoán rằng trường boolean sẽ được định nghĩa là 'NOT NULL'. –
@ypercube, tôi không nghĩ rằng nó sẽ được sử dụng như bất cứ điều gì nhưng hạn chế toàn vẹn. –