Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
9411_9482
Bạn có thể muốn xem cùng kèo bóng đá hôm nay và ngày mai trang chohiện tạiPhiên bản hoặc kèo bóng đá hôm nay và ngày mai trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

11.8. Chỉ mục kèo bóng đá hôm nay và ngày mai

AChỉ mục kèo bóng đá hôm nay và ngày mailà kèo bóng đá hôm nay và ngày mai chỉ mục được xây dựng trên kèo bóng đá hôm nay và ngày mai tập hợp con của bảng; tập hợp con được xác định bởi kèo bóng đá hôm nay và ngày mai biểu thức có điều kiện (được gọi làvị ngữcủa chỉ số kèo bóng đá hôm nay và ngày mai). Chỉ số chỉ chứa các mục cho các hàng bảng đáp ứng vị ngữ. Các chỉ mục kèo bóng đá hôm nay và ngày mai là một tính năng chuyên dụng, nhưng có một số tình huống trong đó chúng hữu ích.

Một lý do chính cho việc sử dụng chỉ mục kèo bóng đá hôm nay và ngày mai là để tránh lập chỉ mục các giá trị chung. Vì một truy vấn tìm kiếm một giá trị chung (một truy vấn cho hơn một vài phần trăm của tất cả các hàng bảng) sẽ không sử dụng chỉ mục, nên không có điểm nào trong việc giữ các hàng đó trong chỉ mục. Điều này làm giảm kích thước của chỉ số, sẽ tăng tốc các truy vấn sử dụng chỉ mục. Nó cũng sẽ tăng tốc nhiều hoạt động cập nhật bảng vì chỉ mục không cần được cập nhật trong mọi trường hợp.Ví dụ 11.111990_12035

Ví dụ 11.1. Thiết lập chỉ mục kèo bóng đá hôm nay và ngày mai để loại trừ các giá trị chung

Giả sử bạn đang lưu trữ nhật ký truy cập máy chủ web trong cơ sở dữ liệu. Hầu hết các quyền truy cập bắt nguồn từ phạm vi địa chỉ IP của tổ chức của bạn nhưng kèo bóng đá hôm nay và ngày mai số đến từ nơi khác (giả sử, nhân viên trên các kết nối quay số). Nếu các tìm kiếm của bạn theo IP chủ yếu cho các truy cập bên ngoài, có lẽ bạn không cần phải lập chỉ mục phạm vi IP tương ứng với mạng con của tổ chức của bạn.

Giả sử kèo bóng đá hôm nay và ngày mai bảng như thế này:

Tạo bảng access_log (
    url varchar,
    client_ip inet,
    ...
);

Để tạo một chỉ mục kèo bóng đá hôm nay và ngày mai phù hợp với ví dụ của chúng tôi, hãy sử dụng một lệnh như thế này:

Tạo chỉ kèo bóng đá hôm nay và ngày mai access_log_client_ip_ix trên access_log (client_ip)
WHERE KHÔNG (client_ip inet '192.168.100.0' và
           client_ip <inet '192.168.100.255');

kèo bóng đá hôm nay và ngày mai truy vấn điển hình có thể sử dụng chỉ mục này sẽ là:

Chọn *
Từ access_log
Trong đó url = '/index.html' và client_ip = inet '212.78.10.32';

Ở đây địa chỉ IP của truy vấn được bao gồm bởi chỉ mục kèo bóng đá hôm nay và ngày mai. Truy vấn sau không thể sử dụng chỉ mục kèo bóng đá hôm nay và ngày mai, vì nó sử dụng địa chỉ IP được loại trừ khỏi chỉ mục:

Chọn *
Từ access_log
Trong đó url = '/index.html' và client_ip = inet '192.168.100,23';

Quan sát rằng loại chỉ số kèo bóng đá hôm nay và ngày mai này yêu cầu các giá trị chung phải được xác định trước, vì vậy các chỉ mục kèo bóng đá hôm nay và ngày mai như vậy được sử dụng tốt nhất cho các phân phối dữ liệu không thay đổi. Các chỉ mục như vậy thỉnh thoảng có thể được tái tạo để điều chỉnh các bản phân phối dữ liệu mới, nhưng điều này thêm nỗ lực bảo trì.


Một cách sử dụng có thể khác cho một chỉ mục kèo bóng đá hôm nay và ngày mai là loại trừ các giá trị khỏi chỉ mục mà khối lượng công việc truy vấn điển hình không quan tâm; Điều này được hiển thị trongVí dụ 11.2. Điều này dẫn đến những lợi thế tương tự như được liệt kê ở trên, nhưng nó ngăn chặnkhông quan tâmHồiCác giá trị được truy cập thông qua chỉ mục đó, ngay cả khi quét chỉ mục có thể mang lại lợi nhuận trong trường hợp đó. Rõ ràng, việc thiết lập các chỉ mục kèo bóng đá hôm nay và ngày mai cho loại kịch bản này sẽ đòi hỏi rất nhiều sự chăm sóc và thử nghiệm.

Ví dụ 11.2. Thiết lập chỉ mục kèo bóng đá hôm nay và ngày mai để loại trừ các giá trị không quan tâm

14823_15133

15170_15259

kèo bóng đá hôm nay và ngày mai truy vấn có thể sử dụng chỉ mục này sẽ là:

15356_15430

Tuy nhiên, chỉ kèo bóng đá hôm nay và ngày mai cũng có thể được sử dụng trong các truy vấn không liên quanorder_nrall, E.G .:

Chọn * Từ các đơn đặt hàng mà hóa đơn không đúng và số tiền 5000.00;

Điều này không hiệu quả như một chỉ mục kèo bóng đá hôm nay và ngày mai trênsố tiềnCột sẽ được, vì hệ thống phải quét toàn bộ chỉ mục. Tuy nhiên, nếu có tương đối ít đơn đặt hàng không có, sử dụng chỉ số kèo bóng đá hôm nay và ngày mai này chỉ để tìm các đơn đặt hàng không có thể là một chiến thắng.

Lưu ý rằng truy vấn này không thể sử dụng chỉ kèo bóng đá hôm nay và ngày mai này:

Chọn * Từ đơn đặt hàng trong đó Order_NR = 3501;

Đơn hàng 3501 có thể nằm trong số các đơn đặt hàng được lập hóa đơn hoặc chưa được thanh toán.


Ví dụ 11.2cũng minh họa rằng cột được lập chỉ kèo bóng đá hôm nay và ngày mai và cột được sử dụng trong vị ngữ không cần phải khớp.PostgreSQL16566_16914WHEREĐiều kiện của truy vấn về mặt toán học ngụ ý vị từ của chỉ kèo bóng đá hôm nay và ngày mai.PostgreSQL17064_17403Mạnhx <1Hồingụ ýx <2; Nếu không, điều kiện vị ngữ phải khớp chính xác với kèo bóng đá hôm nay và ngày mai của truy vấnWHEREĐiều kiện hoặc chỉ mục sẽ không được công nhận là có thể sử dụng được. Kết hợp diễn ra tại thời gian lập kế hoạch truy vấn, không phải lúc chạy. Do đó, các điều khoản truy vấn được tham số hóa không hoạt động với một chỉ mục kèo bóng đá hôm nay và ngày mai. Ví dụ: truy vấn đã chuẩn bị với tham số có thể chỉ địnhHồix <?sẽ không bao giờ ngụ ýx <2Đối với tất cả các giá trị có thể của tham số.

Sử dụng thứ ba có thể cho các chỉ mục kèo bóng đá hôm nay và ngày mai không yêu cầu chỉ số được sử dụng trong các truy vấn. Ý tưởng ở đây là tạo một chỉ mục duy nhất trên một tập hợp con của bảng, như trongVí dụ 11.3. Điều này thực thi tính duy nhất giữa các hàng thỏa mãn vị từ chỉ số, mà không ràng buộc những hàng không.

Ví dụ 11.3. Thiết lập một chỉ mục duy nhất kèo bóng đá hôm nay và ngày mai

Giả sử rằng chúng ta có kèo bóng đá hôm nay và ngày mai bảng mô tả kết quả thử nghiệm. Chúng tôi muốn đảm bảo rằng chỉ có kèo bóng đá hôm nay và ngày maiThành côngMục nhập cho kèo bóng đá hôm nay và ngày mai kết hợp chủ đề và mục tiêu nhất định, nhưng có thể có bất kỳ số lượng nàokhông thành côngmục. Đây là kèo bóng đá hôm nay và ngày mai cách để làm điều đó:

19130_19313

Đây là một cách tiếp cận đặc biệt hiệu quả khi có một vài bài kiểm tra thành công và nhiều bài kiểm tra không thành công. Cũng có thể chỉ cho phép một null trong một cột bằng cách tạo một chỉ mục kèo bóng đá hôm nay và ngày mai duy nhất vớilà nullHạn chế.


Cuối cùng, một chỉ mục kèo bóng đá hôm nay và ngày mai cũng có thể được sử dụng để ghi đè các lựa chọn kế hoạch truy vấn của hệ thống. Ngoài ra, các tập dữ liệu với các bản phân phối đặc biệt có thể khiến hệ thống sử dụng một chỉ mục khi nó thực sự không nên. Trong trường hợp đó, chỉ mục có thể được thiết lập để nó không có sẵn cho truy vấn vi phạm. Thông thường,PostgreSQLLựa chọn hợp lý về việc sử dụng chỉ kèo bóng đá hôm nay và ngày mai (ví dụ: nó tránh chúng khi truy xuất các giá trị chung, vì vậy ví dụ trước đó thực sự chỉ lưu kích thước chỉ số, không bắt buộc phải tránh sử dụng chỉ số) và các lựa chọn kế hoạch không chính xác là nguyên nhân cho báo cáo lỗi.

Hãy nhớ rằng việc thiết lập một chỉ mục kèo bóng đá hôm nay và ngày mai cho biết rằng bạn biết ít nhất là nhiều như trình lập kế hoạch truy vấn biết, đặc biệt là bạn biết khi nào một chỉ mục có thể mang lại lợi nhuận. Hình thành kiến ​​thức này đòi hỏi kinh nghiệm và sự hiểu biết về cách các chỉ mục trongPostgreSQLCông việc. Trong hầu hết các trường hợp, lợi thế của một chỉ số kèo bóng đá hôm nay và ngày mai so với một chỉ số thông thường sẽ là tối thiểu. Có những trường hợp họ khá phản tác dụng, như trongVí dụ 11.4.

20952_21037

Bạn có thể bị cám dỗ để tạo ra một tập hợp lớn các chỉ mục kèo bóng đá hôm nay và ngày mai không chồng chéo, ví dụ

Tạo chỉ kèo bóng đá hôm nay và ngày mai myTable_cat_1 trên mytable (dữ liệu) trong đó loại = 1;
Tạo chỉ kèo bóng đá hôm nay và ngày mai myTable_cat_2 trên mytable (dữ liệu) trong đó loại = 2;
Tạo chỉ kèo bóng đá hôm nay và ngày mai myTable_cat_3 trên mytable (dữ liệu) trong đó loại = 3;
...
Tạo chỉ kèo bóng đá hôm nay và ngày mai mytable_cat_ntrên mytable (dữ liệu) trong đó loại =n;

Đây là kèo bóng đá hôm nay và ngày mai ý tưởng tồi! Gần như chắc chắn, bạn sẽ tốt hơn với kèo bóng đá hôm nay và ngày mai chỉ mục phi thành phần duy nhất, được tuyên bố giống như

Tạo Chỉ kèo bóng đá hôm nay và ngày mai MyTable_Cat_Data trên MyTable (Thể loại, Dữ liệu);

(Đặt cột danh kèo bóng đá hôm nay và ngày mai lên hàng đầu, vì những lý do được mô tả trongPhần 11.3.) Trong khi một tìm kiếm trong chỉ số lớn hơn này có thể phải đi qua một vài cấp độ cây so với tìm kiếm trong một chỉ mục nhỏ hơn, điều đó gần như chắc chắn sẽ rẻ hơn so với nỗ lực của người lập kế hoạch cần thiết để chọn một trong các chỉ mục kèo bóng đá hôm nay và ngày mai. Cốt lõi của vấn đề là hệ thống không hiểu mối quan hệ giữa các chỉ mục kèo bóng đá hôm nay và ngày mai và sẽ kiểm tra một cách công việc để xem liệu nó có áp dụng cho truy vấn hiện tại không.

Nếu bảng của bạn đủ lớn để kèo bóng đá hôm nay và ngày mai chỉ mục thực sự là kèo bóng đá hôm nay và ngày mai ý tưởng tồi, bạn nên xem xét sử dụng phân vùng thay thế (xemPhần 5.11). Với cơ chế đó, hệ thống hiểu rằng các bảng và chỉ kèo bóng đá hôm nay và ngày mai không chồng chéo, cho đến nay có thể thực hiện tốt hơn.


Thông tin thêm về các chỉ mục kèo bóng đá hôm nay và ngày mai có thể được tìm thấy trong[Ston89b], [Olson93][Seshadri95].