Postgresql 9.1.24 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 14. | Tiếp theo |
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.0và
Đ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 đóTENK1
cóSEQ_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ủaTENK1
Sử tỷ lệ kèo bóng đá cùng một chỉ mục cũ đóTENK2
, thăm dòt1.Unique2 = t2.unique2cho mỗitenk2
Hàng. Chi phí để đọcTenk1
và 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
[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à |