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
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ế.

14.1. Sử tỷ lệ kèo bóng đátỷ lệ kèo bóng đá

PostgreSQLnghĩ ra AKế hoạch truy vấnĐối với mỗi truy vấn mà nó nhận được.kế hoạchĐiều đó cố gắng chọn các kế hoạch tốt. Bạn có thểcách đọc kèo bóngLệnh để xem

Cấu trúc của kế hoạch truy vấn là câyKế hoạch các nút. Các nút ở cấp dưới của câytỷ lệ kèo bóng đáCó một dòng cho mỗi nút trong

Đây là một ví dụ tầm thường, chỉ để hiển thị những gì đầu ra trông[1]

tỷ lệ kèo bóng đá chọn * từ TENK1;

Các số được trích dẫn bởitỷ lệ kèo bóng đálà (trái sang phải):

  • Chi phí khởi động ước tính (thời gian dành trước khi đầu ra

  • Tổng chi phí ước tính (nếu tất cả các hàng được truy xuất, mặc dùgiới hạnmệnh đề sẽ ngừng thanh toánGiới hạnKế hoạch của nút

  • Số lượng hàng ước tính đầu ra của nút kế hoạch này (một lần nữa,

  • chiều rộng trung bình ước tính (tính bằng byte) của đầu ra hàng

Chi phí được đo bằng các đơn vị tùy ý được xác định bởiPhần). Thực tiễn truyền thống là để đo lường chi phí trongSEQ_PAGE_COSTđược đặt thành thông thường1.0

Điều quan trọng cần lưu ý là chi phí của một nút cấp trên

ThehàngGiá trị là một chút khó khănkhôngTheWHERE-Có điều kiện đang được

Trở về ví dụ của chúng tôi:

tỷ lệ kèo bóng đá Chọn * từ TENK1;

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

14346_14415

Bạn sẽ tìm thấy điều đóTENK1SEQ_PAGE_COST)cpu_tuple_cost).SEQ_PAGE_COSTlà 1.0 vàcpu_tuple_costlà 0,01, vì vậy ước tính

Bây giờ hãy sửa đổi truy vấn ban đầu để thêmWHEREđiều kiện:

tỷ lệ kèo bóng đá chọn * từ Tenk1 trong đó độc đáo1 <7000;

Lưu ý rằngtỷ lệ kèo bóng đáđầu ra hiển thịWHEREmệnh đề được áp tỷ lệ kèo bóng đá dưới dạng"Filter"Điều kiện; Điều này có nghĩa là như vậyWHEREmệnh đề. Tuy nhiên, việc quét vẫn sẽ phảiCPU_OPERATOR_COST,WHEREđiều kiện.

Số lượng hàng thực tế mà truy vấn này sẽ chọn là 7000, nhưnghàngƯớc tính chỉ gần đúng.Phân tíchlệnh, vì số liệu thống kêPhân tíchđược lấy từ A

Bây giờ, hãy làm cho điều kiện hạn chế hơn:

tỷ lệ kèo bóng đá Chọn * từ Tenk1 trong đó độc đáo1 <100;

Ở đây người lập kế hoạch đã quyết định sử tỷ lệ kèo bóng đá kế hoạch hai bước: The"Bitmap"được đề cập trong

NếuWHEREĐiều kiện được chọn lọc"đơn giản"Kế hoạch quét chỉ mục:

tỷ lệ kèo bóng đá Chọn * từ Tenk1 trong đó độc đáo1 <3;

Trong trường hợp này, các hàng bảng được tìm nạp theo thứ tự chỉ mục, màĐặt hàng bởiĐiều kiện phù hợp với chỉ mục

Thêm điều kiện khác vàoWHEREmệnh đề:

tỷ lệ kèo bóng đá Chọn * từ TENK1 trong đó độc đáo1 <3 và StringU1 = 'xxx';

Điều kiện đượ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ôiStringU1mệnh đề không thể được áp tỷ lệ kèo bóng đá như mộtđộc đáo1cột). Thay vào đó nó được áp tỷ lệ kèo bóng đá làm bộ lọc

Nếu có các chỉ mục trên một số cột được tham chiếu trongở đâu, Người lập kế hoạch có thể chọn sử tỷ lệ kèo bóng đá

tỷ lệ kèo bóng đá Chọn * từ TENK1 trong đó độc đáo1 <100 và độc đáo2 9000;

Nhưng điều này yêu cầu truy cập cả hai chỉ mục, vì vậy nó không

Hãy thử tham gia hai bảng, sử tỷ lệ kèo bóng đá các cột chúng tôi đã

tỷ lệ kèo bóng đá Chọn *

Trong lần nối vòng lặp lồng nhau này, lần quét bên ngoài (trên) giống nhauWHEREmệnh đềĐộc đáo1 <Tại nút đó. Thet1.Unique2 =mệnh đề chưa liên quan, vì vậy nó không ảnh hưởngđộc đáo2Giá trị của quét ngoài hiện tạiđộc đáo2 =hằng số. Vì vậy, chúng tôi cũng nhận được như vậytỷ lệ kèo bóng đá Chọn * từ TENK2 trong đó duy nhất2 = 42.

Trong ví dụ này, số lượng hàng đầu ra của tham gia giống nhưWHEREmệnh đềTrong đó ... và t1.hundred <, sẽ làm giảm số lượng hàng đầu ra của

Một cách để xem xét các kế hoạch biến thể là buộc người lập kế hoạch phảiPhần. (Đây là một công cụ thô, nhưng hữu ích. Xem thêmPhần 14.3.)

Đặt enable_nestloop = off;

Kế hoạch này đề xuất trích xuất 100 hàng thú vị củaTENK1Sử tỷ lệ kèo bóng đá cùng một chỉ mục cũ đóTENK2, thăm dòt1.Unique2 = t2.unique2cho mỗitenk2Hàng. Chi phí để đọcTenk1và thiết lập bảng băm là một khởi độngTenk2. Tổng sốkhôngSạc

Có thể kiểm tra độ chính xác của người lập kế hoạchtỷ lệ kèo bóng đá. Lệnh này thực sự thực hiện truy vấn, và sau đótỷ lệ kèo bóng đáHiển thị. Ví dụ: chúng ta có thể nhận được kết quả

tỷ lệ kèo bóng đá Phân tích Chọn *

Lưu ý rằng"Thời gian thực tế"Giá trịchi phíƯớc tính được thể hiện bằng các đơn vị tùy ý;

Trong một số gói truy vấn, có thể cho một nút convòng lặpBáo cáo giá trịvòng lặpGiá trị

TheTổng thời gian chạyđược hiển thị bởitỷ lệ kèo bóng đá Phân tíchBao gồm khởi nghiệp và thực thiChèn, Cập nhật,,Xóalệnh, thời gian dànhtrướcTriggers, nếu có, được tính cho việc chèn, cập nhật hoặc cập nhật liên quan hoặcsauTriggers thì không. Thời gian dành cho mỗitrướchoặcsau) cũng được hiển thị riêng biệt và được bao gồm trongtỷ lệ kèo bóng đá Phân tích.

Có hai cách quan trọng trong đó thời gian chạy được đo bằngtỷ lệ kèo bóng đá Phân tíchcó thể đi chệch khỏi bình thườngtỷ lệ kèo bóng đá Phân tíchcó thể có ý nghĩa,getTimeOfday ()Cuộc gọi kernel.

Điều đáng chú ý làtỷ lệ kèo bóng đáKết quả không nên ngoại suy cho các tình huống khác ngoài

ghi chú

[1]

Ví dụ trong phần này được rút ra từ hồi quyVacuum, Sử tỷ lệ kèo bóng đá 8.2 Nguồn phát triển. Bạn nên đượcPhân tíchS thống kê là