Partial index hữu ích trong case sd phổ biến là điều kiện where là giá trị hằng số (kiểu như status code)
SELECT message
FROM messages
WHERE processed = 'N'
AND receiver = ?
có thể tối ưu câu query trên bằng a two-column index như sau:thứ tự cột đánh index trong case này ko quan trọng vì ko có điều kiện range condition.
CREATE INDEX messages_todo
ON messages (receiver, processed)
với cách đánh index ở trên thì index đã làm rất tốt vai trò của mình, tốc độ search sẽ rất nhanh nhưng cũng khá là tốn dung lượng ổ cứngtại sao: tại vì có rất nhiều row sẽ ko bao giờ cần tìm (những row mà message đã processed - processed = 'Y')
-> cần dùng partial index - với partial index thì index có thể chỉ chứa những tin nhắn chưa xử lý (unprocessed messages)
cú pháp đánh index 1 phần:
CREATE INDEX messages_todo
ON messages (receiver)
WHERE processed = 'N'
bạn thấy là bây giờ ko cần đánh index trên cột "processed" luôn, vì sao?vì là index này: messages_todo đánh lên cột receiver và luôn có processed = 'N'
-> bằng việc làm như vậy thì index bây giờ giảm size đc cả chiều dọc và chiều ngang (số row ít hơn, số column cũng ít hơn)
0 nhận xét:
Đăng nhận xét