Thứ Ba, 15 tháng 2, 2022

DB8: Partial Indexes (index 1 phần)

Nguồn: use-the-index-luke
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ứng
tạ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)

thelam92

0 nhận xét:

Đăng nhận xét