Sự khác biệt giữa fillfactor bảng và fillfactor chỉ mục


16

Trong Postgres, người ta có thể đặt fillfactor cho một chỉ mục cũng như một bảng. Sự khác biệt là gì? Làm thế nào để quyết định giá trị cho một trong hai. Các usecase là gì?

Tôi đang cố gắng phân cụm một mối quan hệ không gian trên một chỉ số không gian. Nó có một vài triệu hồ sơ. Các hồ sơ được cập nhật mọi lúc mặc dù rất ít những cái mới được tạo ra hàng ngày.

Trường hợp sử dụng là truy vấn phạm vi không gian. Điều gì sẽ là một giá trị tốt cho fillfactor bảng và / hoặc fillfactor chỉ mục?

Câu trả lời:


12

Từ trang hướng dẫn CREATE TABLE (nhấn mạnh thêm):

Fillfactor cho một bảng là tỷ lệ phần trăm từ 10 đến 100. 100 (đóng gói hoàn chỉnh) là mặc định. Khi một fillfactor nhỏ hơn được chỉ định, các thao tác INSERT chỉ gói các trang bảng theo tỷ lệ phần trăm được chỉ định; không gian còn lại trên mỗi trang được dành riêng để cập nhật các hàng trên trang đó. Điều này mang lại cho CẬP NHẬT cơ hội để đặt bản sao được cập nhật của một hàng trên cùng một trang với bản gốc, hiệu quả hơn so với việc đặt nó trên một trang khác. Đối với một bảng có các mục không bao giờ được cập nhật, đóng gói hoàn chỉnh là lựa chọn tốt nhất, nhưng trong các bảng được cập nhật nhiều thì các fillfactors nhỏ hơn là phù hợp.

Từ trang hướng dẫn CREATE INDEX (nhấn mạnh thêm):

Fillfactor cho một chỉ mục là một tỷ lệ phần trăm xác định mức độ đầy đủ mà phương thức chỉ mục sẽ cố gắng đóng gói các trang chỉ mục. Đối với cây B, các trang lá được điền vào tỷ lệ phần trăm này trong quá trình xây dựng chỉ mục ban đầu và cả khi mở rộng chỉ mục ở bên phải (giá trị khóa lớn nhất). Nếu các trang sau đó trở nên hoàn toàn đầy đủ, chúng sẽ bị chia tách, dẫn đến suy giảm dần dần về hiệu quả của chỉ mục.Cây B sử dụng fillfactor mặc định là 90, nhưng có thể chọn bất kỳ giá trị nào từ 10 đến 100. Nếu bảng là tĩnh thì fillfactor 100 là tốt nhất để giảm thiểu kích thước vật lý của chỉ mục, nhưng đối với các bảng được cập nhật nhiều, fillfactor nhỏ hơn sẽ tốt hơn để giảm thiểu nhu cầu chia trang. Các phương thức chỉ mục khác sử dụng fillfactor theo các cách khác nhau nhưng gần giống nhau; fillfactor mặc định khác nhau giữa các phương thức.


1
Đó là thông lệ để đề cập đến nguồn gốc của một trích dẫn. Ngay cả khi nó dễ dàng để tìm ra.
Erwin Brandstetter

vâng, chắc chắn) đôi khi quên ...

Xin lỗi để cằn nhằn thêm một số. Vui lòng liên kết với phiên bản hiện tại của hướng dẫn sử dụng (trừ khi bạn cần giải quyết một địa chỉ cụ thể). Tôi đã chỉnh sửa. Thêm về điều đó ở đây .
Erwin Brandstetter

Các liên kết là ngược.
Dave Johansen

2
Re: "Nếu bảng là tĩnh thì fillfactor 100 là tốt nhất để giảm thiểu kích thước vật lý của chỉ mục, nhưng đối với các bảng được cập nhật nhiều, fillfactor nhỏ hơn sẽ tốt hơn để giảm thiểu nhu cầu chia trang." Cố gắng hiểu ngữ cảnh của "các bảng được cập nhật nhiều" - điều đó có nghĩa là bảng có các giá trị hàng được cập nhật nhiều hay có lẽ cũng bao gồm các bảng có các hàng thường được chèn và / hoặc xóa? Tôi muốn biết nếu bảng của tôi, với một vài thay đổi đối với các giá trị hàng nhưng chèn và xóa rộng rãi, có thể được hưởng lợi từ fillfactor thấp hơn trên chỉ mục chính (khóa) của nó.
Reinsbrain
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.