Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

11.9. Quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay và chỉ tỷ lệ kèo bóng đá tối nay bao gồm

Tất cả các chỉ tỷ lệ kèo bóng đá tối nay trongPostgreSQLThứ cấpChỉ tỷ lệ kèo bóng đá tối nay, có nghĩa là mỗi chỉ tỷ lệ kèo bóng đá tối nay được lưu trữ riêng biệt với khu vực dữ liệu chính của bảng (được gọi là bảngHeapinPostgreSQLThuật ngữ). Điều này có nghĩa là trong quá trình quét chỉ tỷ lệ kèo bóng đá tối nay thông thường, mỗi lần truy xuất hàng yêu cầu tìm nạp dữ liệu từ cả chỉ tỷ lệ kèo bóng đá tối nay và đống.WHEREĐiều kiện thường được kết hợp với nhau trong chỉ tỷ lệ kèo bóng đá tối nay, các hàng bảng mà họ tham chiếu có thể ở bất cứ đâu trong đống. Do đó, phần truy cập heap của quét chỉ tỷ lệ kèo bóng đá tối nay bao gồm rất nhiều truy cập ngẫu nhiên vào đống, có thể chậm, đặc biệt là trên phương tiện xoay truyền thống.Phần 11.5, quét bitmap cố gắng giảm chi phí này bằng cách thực hiện các truy cập đống theo thứ tự được sắp xếp, nhưng điều đó chỉ đi xa.)

Để giải quyết vấn đề hiệu suất này,PostgreSQLHỗ trợQuét chỉ có chỉ tỷ lệ kèo bóng đá tối nay, có thể trả lời các truy vấn từ một chỉ tỷ lệ kèo bóng đá tối nay mà không cần bất kỳ truy cập đống nào. Ý tưởng cơ bản là trả về các giá trị trực tiếp ra khỏi mỗi tỷ lệ kèo bóng đá tối nay nhập chỉ tỷ lệ kèo bóng đá tối nay thay vì tham khảo tỷ lệ kèo bóng đá tối nay nhập đống liên kết.

  1. Loại chỉ tỷ lệ kèo bóng đá tối nay phải hỗ trợ quét chỉ chỉ tỷ lệ kèo bóng đá tối nay. Các chỉ tỷ lệ kèo bóng đá tối nay B-cây luôn luôn làm.

  2. Truy vấn chỉ phải tham chiếu các cột được lưu trữ trong chỉ tỷ lệ kèo bóng đá tối nay. Ví dụ: đã cho một chỉ tỷ lệ kèo bóng đá tối nay trên các cộtxycủa một bảng cũng có cộtZ, Các truy vấn này có thể sử dụng các lần quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay:

    Chọn x, y từ tab trong đó x = 'phím';

    Nhưng các truy vấn này không thể:

    Chọn x, z từ tab trong đó x = 'phím';

    (chỉ tỷ lệ kèo bóng đá tối nay biểu thức và chỉ tỷ lệ kèo bóng đá tối nay một phần làm phức tạp quy tắc này, như được thảo luận dưới đây.)

Nếu hai yêu cầu cơ bản này được đáp ứng, thì tất cả các giá trị dữ liệu theo yêu cầu của truy vấn đều có sẵn từ chỉ tỷ lệ kèo bóng đá tối nay, do đó, việc quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay là có thể. Nhưng có một yêu cầu bổ sung cho bất kỳ bảng quét nào trongPostgreSQL: Nó phải xác minh rằng mỗi hàng được truy xuất làCó thể nhìn thấyxôngđến ảnh chụp nhanh MVCC của truy vấn, như đã thảo luận trongChương 13. Thông tin khả năng hiển thị không được lưu trữ trong các tỷ lệ kèo bóng đá tối nay nhập chỉ tỷ lệ kèo bóng đá tối nay, chỉ trong các tỷ lệ kèo bóng đá tối nay nhập đống;PostgreSQLTrình theo dõi, cho mỗi trang trong đống của bảng, cho dù tất cả các hàng được lưu trữ trong trang đó có đủ tuổi để hiển thị cho tất cả các giao dịch hiện tại và tương lai. Thông tin này được lưu trữ trong một chút trong bảngBản đồ hiển thị. Quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay, sau khi tìm một tỷ lệ kèo bóng đá tối nay nhập chỉ tỷ lệ kèo bóng đá tối nay ứng cử viên, kiểm tra bit bản đồ hiển thị cho trang heap tương ứng.

Tóm lại, trong khi có thể quét chỉ có chỉ số theo yêu cầu cơ bản, thì đó sẽ chỉ là một chiến thắng nếu một phần đáng kể của các trang đống của bảng có các bit bản đồ có thể nhìn thấy được. Nhưng các bảng trong đó một phần lớn các hàng không thay đổi là đủ phổ biến để làm cho loại quét này rất hữu ích trong thực tế.

Để sử dụng hiệu quả tính năng quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay, bạn có thể chọn tạo mộtChỉ số bao gồm, một chỉ tỷ lệ kèo bóng đá tối nay được thiết kế đặc biệt để bao gồm các cột cần thiết bởi một loại truy vấn cụ thể mà bạn chạy thường xuyên. Vì các truy vấn thường cần truy xuất nhiều cột hơn là chỉ có các cột họ tìm kiếm,PostgreSQLCho phép bạn tạo một chỉ tỷ lệ kèo bóng đá tối nay trong đó một số cột chỉ làHồitải trọngKhănvà không phải là một phần của khóa tìm kiếm. Điều này được thực hiện bằng cách thêm mộtBao gồmmệnh đề liệt kê các cột bổ sung. Ví dụ: nếu bạn thường chạy các truy vấn như

Chọn y từ tab trong đó x = 'key';

Cách tiếp cận truyền thống để tăng tốc các truy vấn như vậy sẽ là tạo một chỉ tỷ lệ kèo bóng đá tối nay trênxChỉ. Tuy nhiên, một chỉ tỷ lệ kèo bóng đá tối nay được xác định là

Tạo chỉ tỷ lệ kèo bóng đá tối nay tab_x_y trên tab (x) bao gồm (y);

Có thể xử lý các truy vấn này dưới dạng quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay, vìycó thể được lấy từ chỉ tỷ lệ kèo bóng đá tối nay mà không cần truy cập đống.

Vì cộtykhông phải là một phần của khóa tìm kiếm của chỉ tỷ lệ kèo bóng đá tối nay, nó không phải thuộc loại dữ liệu mà chỉ tỷ lệ kèo bóng đá tối nay có thể xử lý; Nó chỉ đơn thuần được lưu trữ trong chỉ tỷ lệ kèo bóng đá tối nay và không được giải thích bởi bộ máy chỉ tỷ lệ kèo bóng đá tối nay.

Tạo chỉ tỷ lệ kèo bóng đá tối nay duy nhất tab_x_y trên tab (x) bao gồm (y);

Điều kiện độc đáo áp dụng cho chỉ cộtx, không kết hợpxy. (MỘTBao gồmmệnh đề cũng có thể được viết bằngđộc đáoKhóa chínhràng buộc, cung cấp cú pháp thay thế để thiết lập một chỉ tỷ lệ kèo bóng đá tối nay như thế này.)

Thật khôn ngoan khi bảo thủ về việc thêm các cột tải trọng không phải là một chỉ tỷ lệ kèo bóng đá tối nay, đặc biệt là các cột rộng. Nếu một bộ chỉ số vượt quá kích thước tối đa được phép cho loại chỉ tỷ lệ kèo bóng đá tối nay, việc chèn dữ liệu sẽ không thành công.

TrướcPostgreSQLBao gồm16606_16730

Tạo chỉ tỷ lệ kèo bóng đá tối nay tab_x_y trên tab (x, y);

Mặc dù họ không có ý định sử dụngylà một phần của AWHEREmệnh đề. Điều này hoạt động tốt miễn là các cột bổ sung là các cột theo dõi;Phần 11.3. Tuy nhiên, phương pháp này không hỗ trợ trường hợp bạn muốn chỉ tỷ lệ kèo bóng đá tối nay thực thi tính duy nhất trên (các) cột chính.Bao gồmCác cột làm cho chỉ tỷ lệ kèo bóng đá tối nay nhỏ hơn một chút, vì các cột như vậy không cần được lưu trữ ở các cấp độ B-cây trên.

Về nguyên tắc, các lần quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay có thể được sử dụng với các chỉ tỷ lệ kèo bóng đá tối nay biểu thức. Ví dụ: đã cho một chỉ tỷ lệ kèo bóng đá tối nay trênf (x)WHERExlà một cột bảng, có thể thực thi

Chọn f (x) từ tab trong đó f (x) <1;

dưới dạng quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay; Và điều này rất hấp dẫn nếuf ()là một hàm đắt tiền. Tuy nhiên,POSTGRESQLNgười lập kế hoạch hiện không thông minh lắm về những trường hợp như vậy. Nó coi một truy vấn có khả năng thực thi chỉ bằng cách quét chỉ chỉ tỷ lệ kèo bóng đá tối nay khi tất cảcộtCần thiết bởi truy vấn có sẵn từ chỉ tỷ lệ kèo bóng đá tối nay. Trong ví dụ này,xKhông cần thiết ngoại trừ trong bối cảnhf (x), nhưng người lập kế hoạch không nhận thấy điều đó và kết luận rằng không thể quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay. Nếu quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay có vẻ đủ đáng giá, thì điều này có thể được làm việc xung quanh bằng cách thêmxVí dụ như một cột bao gồm

Tạo chỉ tỷ lệ kèo bóng đá tối nay tab_f_x trên tab (f (x)) bao gồm (x);

Một cảnh báo bổ sung, nếu tỷ lệ kèo bóng đá tối nay tiêu là tránh tính toán lạif (x), là người lập kế hoạch sẽ không nhất thiết phải khớp với việc sử dụngf (x)không có thể lập chỉ tỷ lệ kèo bóng đá tối nayWHEREmệnh đề đến cột chỉ tỷ lệ kèo bóng đá tối nay. Nó thường sẽ có được quyền này trong các truy vấn đơn giản như được hiển thị ở trên, nhưng không phải trong các truy vấn liên quan đến tham gia.PostgreSQL.

Chỉ số một phần cũng có các tương tác thú vị với các lần quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay. Xem xét chỉ tỷ lệ kèo bóng đá tối nay một phần được hiển thị trongVí dụ 11.3:

19481_19575

Về nguyên tắc, chúng ta có thể thực hiện quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay trên chỉ tỷ lệ kèo bóng đá tối nay này để đáp ứng một truy vấn như

Chọn tỷ lệ kèo bóng đá tối nay tiêu từ các bài kiểm tra trong đó chủ đề = 'một số chủ thể' và thành công;

Nhưng có một vấn đề:ở đâumệnh đề đề cập đếnThành côngkhông có sẵn theo kết quả của cột của chỉ tỷ lệ kèo bóng đá tối nay. Tuy nhiên, có thể quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay vì kế hoạch không cần phải kiểm tra lại phần đó củaở đâumệnh đề tại thời điểm chạy: Tất cả các tỷ lệ kèo bóng đá tối nay được tìm thấy trong chỉ tỷ lệ kèo bóng đá tối nay nhất thiết phải cóthành công = trueVì vậy, điều này không cần phải được kiểm tra rõ ràng trong kế hoạch.PostgreSQLPhiên bản 9.6 trở lên sẽ nhận ra các trường hợp đó và cho phép các lần quét chỉ có chỉ tỷ lệ kèo bóng đá tối nay được tạo, nhưng các phiên bản cũ hơn sẽ không.