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 / 7.1
Tài kèo bóng đá hôm nay và ngày mai 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 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ế.

Chương 11. Mẹo kèo bóng đá hôm nay và ngày mai

kèo bóng đá hôm nay và ngày mai truy vấn có thể bị ảnh hưởng bởi nhiều thứ. Một số những điều này có thể được người dùng thao túng, trong khi những người khác là cơ bản cho thiết kế cơ bản của hệ thống. Chương này cung cấp một số gợi ý về sự hiểu biết và điều chỉnhPostgreSQLkèo bóng đá hôm nay và ngày mai.

11.1. Sử dụngGiải thích

PostgreSQLnghĩ ra Akèo bóng đá hôm nay và ngày mai truy vấnĐối với mỗi truy vấn nó được đưa ra. Chọn đúng kế hoạch để phù hợp với cấu trúc truy vấn và Thuộc tính của dữ liệu là hoàn toàn quan trọng cho tốt kèo bóng đá hôm nay và ngày mai. Bạn có thể sử dụngGiải thíchLệnh để xem kế hoạch truy vấn nào mà hệ thống tạo ra cho bất kỳ truy vấn. Kế hoạch đọc là kèo bóng đá hôm nay và ngày mai nghệ thuật xứng đáng Hướng dẫn, điều này không phải là; Nhưng đây là kèo bóng đá hôm nay và ngày mai số cơ bản thông tin.

Các số hiện được trích dẫn bởiGiải thíchlà:

  • Chi phí khởi động ước tính (thời gian dành trước khi đầu ra Quét có thể bắt đầu, ví dụ: thời gian để sắp xếp theo kèo bóng đá hôm nay và ngày mai loại nút).

  • Tổng chi phí ước tính (nếu tất cả các bộ dữ Họ có thể không --- kèo bóng đá hôm nay và ngày mai truy vấn có giới hạn sẽ dừng lại Ví dụ, trả tổng chi phí).

  • Số lượng hàng ước tính đầu ra bởi nút kế hoạch này (kèo bóng đá hôm nay và ngày mai lần nữa, không quan tâm đến bất kỳ giới hạn nào).

  • chiều rộng trung bình ước tính (tính bằng byte) của đầu ra hàng Nút kèo bóng đá hôm nay và ngày mai này.

Chi phí được đo bằng đơn vị của trang đĩa. (CPU Ước tính nỗ lực được chuyển đổi thành các đơn vị disk-trang bằng cách sử dụng kèo bóng đá hôm nay và ngày mai số khá tùy tiện các yếu tố fudge. Nếu bạn muốn thử nghiệm với Những yếu tố này, xem danh sách cấu hình thời gian chạy tham số trongQuản trị viên Hướng dẫn.)

Điều quan trọng cần lưu ý là chi phí của kèo bóng đá hôm nay và ngày mai nút cấp trên Bao gồm chi phí của tất cả các nút con của nó. Nó cũng quan trọng để nhận ra rằng chi phí chỉ phản ánh những điều mà Người lập kế hoạch/tối ưu hóa quan tâm. Đặc biệt, chi phí không xem xét thời gian truyền các kết quả truyền đạt cho Frontend --- có thể là kèo bóng đá hôm nay và ngày mai yếu tố chiếm ưu thế trong thời gian trôi qua thực sự, nhưng người lập kế hoạch bỏ qua nó vì nó không thể Thay đổi nó bằng cách thay đổi kế hoạch. (Mọi kế hoạch chính xác sẽ xuất hiện cùng kèo bóng đá hôm nay và ngày mai bộ tuple, chúng tôi tin tưởng.)

Đầu ra hàng có kèo bóng đá hôm nay và ngày mai chút khó khăn vì nó làkhôngSố lượng hàng được xử lý/quét bởi truy vấn --- nó thường ít hơn, phản ánh tính chọn lọc ước tính của bất kỳ điều khoản nào Các ràng buộc đang được áp dụng tại nút này. Lý tưởng nhất là Ước tính các hàng cấp cao nhất sẽ xấp xỉ số lượng hàng Thực tế đã được trả về, cập nhật hoặc bị xóa bởi truy vấn.

Đây là kèo bóng đá hôm nay và ngày mai số ví dụ (sử dụng cơ sở dữ liệu kiểm tra hồi quy Sau khi phân tích chân không và 7.2 nguồn phát triển):

hồi quy =# Giải thích Chọn * từ TENK1;
Thông báo: kèo bóng đá hôm nay và ngày mai truy vấn:

SEQ SCAN trên TENK1 (chi phí = 0,00..333.00 hàng = 10000 chiều rộng = 148)

Điều này là đơn giản như nó được. Nếu bạn làm

Chọn * từ pg_class kèo bóng đá hôm nay và ngày mai đó relname = 'tenk1';

Bạn sẽ tìm ra rằngTENK1có 233 trang đĩa và 10000 bộ dữ liệu. Vì vậy, kèo bóng đá hôm nay và ngày mai phí được ước tính Ở 233 trang đọc, được xác định là 1.0 apiece, cộng với 10000 *cpu_tuple_costHiện tại 0,01 (thửHiển thị CPU_Tuple_Cost).

Bây giờ hãy sửa đổi truy vấn để thêm trình độ mệnh đề:

hồi quy =# Giải thích Chọn * từ Tenk1 kèo bóng đá hôm nay và ngày mai đó độc đáo1 <1000;
Thông báo: Kế hoạch truy vấn:

SEQ SCAN trên TENK1 (chi phí = 0,00..358.00 hàng = 1007 chiều rộng = 148)

Ước tính các hàng đầu ra đã giảm vì Điều khoản ở đâu. Tuy nhiên, việc quét vẫn sẽ phải đến thăm tất cả 10000 hàng, vì vậy chi phí chưa giảm; trong thực tế nó đã đi tăng kèo bóng đá hôm nay và ngày mai chút để phản ánh thời gian CPU thêm để kiểm tra nơi tình trạng.

Số lượng hàng thực tế mà truy vấn này sẽ chọn là 1000, Nhưng ước tính chỉ là gần đúng. Nếu bạn cố gắng sao chép Thử nghiệm này, bạn có thể sẽ nhận được kèo bóng đá hôm nay và ngày mai chút khác biệt ước lượng; Hơn nữa, nó sẽ thay đổi sau mỗiPhân tíchlệnh, vì các số kèo bóng đá hôm nay và ngày mai thống kê được tạo ra quaPhân tíchđược lấy từ kèo bóng đá hôm nay và ngày mai ngẫu nhiên mẫu của bảng.

Sửa đổi truy vấn để hạn chế trình độ chuyên môn thậm chí hơn:

hồi quy =# Giải thích Chọn * từ TENK1 kèo bóng đá hôm nay và ngày mai đó độc đáo1 <50;
Thông báo: Kế hoạch truy vấn:

Quét chỉ mục bằng tenk1_unique1 trên tenk1 (chi phí = 0,00..181,09 hàng = 49 chiều rộng = 148)

Và bạn sẽ thấy rằng nếu chúng ta thực hiện điều kiện ở nơi đủ chọn lọc, người lập kế hoạch cuối cùng sẽ quyết định rằng kèo bóng đá hôm nay và ngày mai Quét chỉ mục rẻ hơn so với quét tuần tự. Kế hoạch này sẽ chỉ phải truy cập 50 bộ dữ Mặc dù thực tế là mỗi lần tìm nạp cá nhân đắt hơn hơn đọc toàn bộ trang đĩa theo tuần tự.

Add another condition to the qualification:

Repression =# Giải thích Chọn * từ TENK1 kèo bóng đá hôm nay và ngày mai đó độc đáo1 <50 và
hồi quy-# StringU1 = 'xxx';
Thông báo: Kế hoạch truy vấn:

Quét chỉ mục bằng TENK1_UNIQUE1 trên TENK1 (chi phí = 0,00..181.22 hàng = 1 chiều rộng = 148)

mệnh đề được thêm vàoStringU1 = 'xxx'Giảm ước tính hàng đầu ra, nhưng không phải là chi phí vì chúng tôi Vẫn phải truy cập cùng kèo bóng đá hôm nay và ngày mai bộ dữ liệu.

Hãy thử tham gia hai bảng, sử dụng các trường chúng tôi đã Thảo luận:

17578_17987

Trong tham gia vòng lặp lồng nhau này, quét bên ngoài là cùng kèo bóng đá hôm nay và ngày mai chỉ mục quét chúng tôi đã có trong ví dụ trước đây, và vì vậy chi phí và hàng của nó Đếm là giống nhau bởi vì chúng tôi đang áp dụngđộc đáo1 <50Đơn vị ở kèo bóng đá hôm nay và ngày mai nút đó. Thet1.Unique2 = t2.unique2mệnh đề không Có liên quan, vì vậy nó không ảnh hưởng đến số lượng hàng của quét bên ngoài. Đối với quét bên kèo bóng đá hôm nay và ngày mai, giá trị duy nhất của quét ngoài hiện tại Tuple được cắm vào quét chỉ mục bên kèo bóng đá hôm nay và ngày mai để tạo chỉ mục Trình độ chuyên môn nhưT2.Unique2 =hằng số. Vì vậy, chúng tôi cũng nhận được như vậy Kế hoạch quét bên kèo bóng đá hôm nay và ngày mai và chi phí mà chúng ta sẽ nhận được, nói,Giải thích Chọn * từ Tenk2 kèo bóng đá hôm nay và ngày mai đó duy nhất2 = 42. Các chi phí của nút vòng sau đó được đặt trên cơ sở Chi phí quét bên ngoài, cộng với kèo bóng đá hôm nay và ngày mai lần lặp lại của quét bên trong Đối với mỗi tuple bên ngoài (49 * 3.01, ở đây), cộng với kèo bóng đá hôm nay và ngày mai chút thời gian CPU Để tham gia xử lý.

kèo bóng đá hôm nay và ngày mai ví dụ này, số lượng hàng đầu ra của vòng lặp giống như sản phẩm của hai hàng quét, nhưng điều đó không đúng Nói chung, bởi vì nói chung, bạn có thể có những điều khoản đề cập đến cả hai mối quan hệ và vì vậy chỉ có thể được áp dụng tại tham gia Điểm, không phải để quét đầu vào. Ví dụ: nếu chúng ta đã thêmkèo bóng đá hôm nay và ngày mai đó ... và t1.hundred < t2.hundred, sẽ làm giảm số lượng hàng đầu ra của nút nối, nhưng không thay đổi quét đầu vào.

kèo bóng đá hôm nay và ngày mai cách để xem xét các kế hoạch biến thể là buộc người lập kế hoạch phải coi thường bất kỳ chiến lược nào mà nó nghĩ là người chiến thắng, sử dụng Các cờ Bật/Tắt cho từng loại kế hoạch. (Đây là kèo bóng đá hôm nay và ngày mai thô công cụ, nhưng hữu ích. Xem thêmPhần 11.3.)

hồi quy =# set enable_nestloop = off;
Đặt biến
Repression =# Giải thích Chọn * Từ Tenk1 T1, Tenk2 T2 kèo bóng đá hôm nay và ngày mai đó T1.Unique1 <50
hồi quy-# và t1.unique2 = t2.Unique2;
Thông báo: Kế hoạch truy vấn:

Băm tham gia (chi phí = 181,22..564.83 hàng = 49 chiều rộng = 296)
  - SEQ SCAN trên TENK2 T2
               (Chi phí = 0,00..333.00 hàng = 10000 chiều rộng = 148)
  - băm (chi phí = 181,09..181,09 hàng = 49 chiều rộng = 148)
        - Quét chỉ mục bằng TENK1_UNIQUE1 trên TENK1 T1
               (chi phí = 0,00..181,09 hàng = 49 chiều rộng = 148)

kèo bóng đá hôm nay và ngày mai này đề xuất trích xuất 50 hàng thú vịTENK1Sử dụng cùng kèo bóng đá hôm nay và ngày mai chỉ mục cũ quét, cất chúng vào bảng băm trong bộ nhớ, và sau đó thực hiện Quét tuần tựTENK2,, thăm dò vào bảng băm cho các trận đấu có thể củat1.Unique2 = t2.unique2Tại mỗiTENK2tuple. kèo bóng đá hôm nay và ngày mai phí để đọcTENK1và thiết lập bảng băm hoàn toàn kèo bóng đá hôm nay và ngày mai phí khởi động cho băm tham gia, vì chúng tôi sẽ không nhận được bất kỳ bộ dữ ra ngoài cho đến khi chúng ta có thể bắt đầu đọctenk2. Tổng ước tính thời gian cho sự tham gia cũng bao gồm kèo bóng đá hôm nay và ngày mai khoản phí khổng lồ cho thời gian CPU để thăm dò hàm băm Bảng 10000 lần. Tuy nhiên, lưu ý rằng chúng tôi không tính phí 10000 lần 181,09; Thiết lập bảng băm chỉ được thực hiện kèo bóng đá hôm nay và ngày mai lần trong Loại kế hoạch này.

Có thể kiểm tra độ chính xác của người lập kế hoạch Chi phí ước tính bằng cách sử dụng Phân tích giải thích. Lệnh này thực sự thực thi truy vấn, sau đó hiển thị thời gian chạy thực được tích lũy trong mỗi nút kế hoạch cùng với cùng kèo bóng đá hôm nay và ngày mai ước tính Chi phí mà kèo bóng đá hôm nay và ngày mai đơn giản giải thích cho thấy. Ví dụ: chúng ta có thể nhận được kèo bóng đá hôm nay và ngày mai Kết quả như thế này:

hồi quy =# Giải thích Phân tích
hồi quy-# Chọn * từ Tenk1 T1, Tenk2 T2
hồi quy-# kèo bóng đá hôm nay và ngày mai đó t1.Unique1 <50 và t1.Unique2 = t2.unique2;
Thông báo: Kế hoạch truy vấn:

Vòng lặp lồng nhau (chi phí = 0,00..330,41 hàng = 49 chiều rộng = 296) (thời gian thực tế = 1.31..28.90 hàng = 50 vòng = 1)
  - Quét chỉ mục bằng TENK1_UNIQUE1 trên TENK1 T1
               .
  - Quét chỉ mục bằng TENK2_UNIQUE2 trên TENK2 T2
               .
Tổng thời gian chạy: 30,67 msec

Lưu ý rằng"Thời gian thực tế"Các giá trị là kèo bóng đá hôm nay và ngày mai mili giây của thời gian thực, kèo bóng đá hôm nay và ngày mai khi"kèo bóng đá hôm nay và ngày mai phí"Ước tính được thể hiện kèo bóng đá hôm nay và ngày mai đơn vị tùy ý của đĩa giả; Vì vậy, họ không có khả năng phù hợp hướng lên. Điều cần chú ý là các tỷ lệ.

Trong kèo bóng đá hôm nay và ngày mai số gói truy vấn, có thể cho kèo bóng đá hôm nay và ngày mai nút con thực hiện nhiều hơn kèo bóng đá hôm nay và ngày mai lần. Ví dụ: quét chỉ mục bên trong là được thực hiện kèo bóng đá hôm nay và ngày mai lần trên mỗi tuple bên ngoài trong kế hoạch vòng lặp lồng trên. TRONG Những trường hợp như vậy,"Loops"Giá trị báo cáo tổng số lần thực thi của nút và Giá trị thời gian và hàng thực tế được hiển thị là trung bình trên mỗi lần thực hiện. Điều này được thực hiện để làm cho các con số có thể so sánh với cách Các ước tính kèo bóng đá hôm nay và ngày mai phí được hiển thị. Nhân với"Loops"Giá trị để có được tổng thời gian thực sự chi tiêu kèo bóng đá hôm nay và ngày mai nút.

The"Tổng thời gian chạy"hiển thị bởi Giải thích Phân tích bao gồm Khởi động và Thời gian Tắt máy thực thi, khi cũng như thời gian dành để xử lý các bộ dữ liệu kết quả. Nó không Bao gồm phân tích cú pháp, viết lại hoặc thời gian lập kế hoạch. Cho kèo bóng đá hôm nay và ngày mai lựa chọn truy vấn, tổng thời gian chạy thường sẽ lớn hơn kèo bóng đá hôm nay và ngày mai chút hơn tổng thời gian được báo cáo cho nút kế hoạch cấp cao nhất. Vì Chèn, cập nhật và xóa truy vấn, tổng thời gian chạy có thể lớn hơn đáng kể, bởi vì nó bao gồm thời gian dành xử lý các bộ dữ liệu đầu ra. Trong các truy vấn này, thời gian cho Nút kế hoạch hàng đầu về cơ bản là thời gian dành cho máy tính Bộ dữ liệu mới và/hoặc định vị những cái cũ, nhưng nó không bao gồm thời gian dành cho các thay đổi.

Điều đáng chú ý là không nên giải thích kết quả ngoại suy cho các tình huống khác ngoài tình huống bạn thực sự thử nghiệm; Ví dụ: kết quả trên kèo bóng đá hôm nay và ngày mai bàn có kích thước đồ chơi không thể Giả sử áp dụng cho các bảng lớn. Ước tính chi phí của người lập kế hoạch không phải là tuyến tính và vì vậy nó cũng có thể chọn kèo bóng đá hôm nay và ngày mai kế hoạch khác cho kèo bóng đá hôm nay và ngày mai Bảng lớn hơn hoặc nhỏ hơn. kèo bóng đá hôm nay và ngày mai ví dụ cực đoan là trên bàn chỉ chiếm kèo bóng đá hôm nay và ngày mai trang kèo bóng đá hôm nay và ngày mai đĩa, gần như bạn sẽ luôn nhận được Kế hoạch quét tuần tự cho dù chỉ mục có sẵn hay không. Các Người lập kế hoạch nhận ra rằng nó sẽ lấy kèo bóng đá hôm nay và ngày mai trang đĩa được đọc cho Xử lý bảng trong mọi trường hợp, vì vậy không có giá trị trong việc chi tiêu Trang bổ sung đọc để xem kèo bóng đá hôm nay và ngày mai chỉ mục.