PostgreSQL: soi kèo bóng đá | |||
---|---|---|---|
prev | UP | Chương 14. Mẹo thực hiện | NEXT |
PostgreSQLnghĩ ra Akèo bóng đá c1 truy vấnĐối với mỗi truy vấn mà nó nhận được. Chọn đúng kèo bóng đá c1 để phù hợp với cấu trúc truy vấn và các thuộc tính của dữ liệu là hoàn toàn quan trọng cho hiệu suất tốt, vì vậy hệ thống bao gồm một phức tạpkèo bóng đá c1Điều đó cố gắng chọn các kế hoạch tốt. Bạn có thể sử kèo bóng đá c1PostgreSQL: TàLệnh để xem kèo bóng đá c1 truy vấn nào mà người lập kèo bóng đá c1 tạo cho bất kỳ truy vấn nào. Đọc kèo bóng đá c1 là một nghệ thuật đòi hỏi một số kinh nghiệm để làm chủ, nhưng phần này cố gắng bao gồm những điều cơ bản.
10117_10202Phân tích chân không, sử kèo bóng đá c1 9.3 Nguồn phát triển. Bạn sẽ có thể nhận được kết quả tương tự nếu bạn tự mình thử các ví dụ, nhưng chi phí ước tính và số lượng hàng của bạn có thể thay đổi một chút vìPhân tíchS thống kê là kèo bóng đá c1 mẫu ngẫu nhiên chứ không phải chính xác và vì chi phí vốn có phần phụ thuộc vào nền tảng.
Các ví dụ sử kèo bóng đá c1Giải kèo bóng đá c1'mặc định"Text"Định dạng đầu ra, nhỏ gọn và thuận tiện cho con người đọc. Nếu bạn muốn cho ănGiải kèo bóng đá c1đầu ra của chương trình để phân tích thêm, bạn nên sử kèo bóng đá c1 một trong các định dạng đầu ra có thể đọc được bằng máy của nó (XML, JSON hoặc YAML) thay thế.
Cấu trúc của kèo bóng đá c1 truy vấn là câykèo bóng đá c1 các nút11152_11422Giá trịkèo bóng đá c1 điều khoản và kèo bóng đá c1 chức năng trả lại trongtừ, có các loại nút quét riêng của chúng. Nếu truy vấn yêu cầu tham gia, tập hợp, sắp xếp hoặc các hoạt động khác trên các kèo bóng đá c1 thô, thì sẽ có các nút bổ sung phía trên các nút quét để thực hiện các hoạt động này. Một lần nữa, thường có nhiều hơn một cách có thể để thực hiện các hoạt động này, vì vậy các loại nút khác nhau cũng có thể xuất hiện ở đây. Đầu ra củaGiải kèo bóng đá c1Có một dòng cho mỗi nút trong cây kèo bóng đá c1, hiển thị loại nút cơ bản cộng với ước tính chi phí mà người lập kèo bóng đá c1 thực hiện để thực hiện nút kèo bóng đá c1 đó. Các dòng bổ sung có thể xuất hiện, được thụt vào từ dòng tóm tắt của nút, để hiển thị các thuộc tính bổ sung của nút. Dòng đầu tiên (dòng tóm tắt cho nút trên cùng) có tổng chi phí thực hiện ước tính cho kèo bóng đá c1; đó là số mà người lập kèo bóng đá c1 tìm cách giảm thiểu.
Đây là kèo bóng đá c1 ví dụ tầm thường, chỉ để hiển thị đầu ra trông như thế nào:
Giải kèo bóng đá c1 Chọn * từ Tenk1; Kế hoạch truy vấn --------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..458.00 hàng = 10000 chiều rộng = 244)
Vì truy vấn này không cóWHEREmệnh đề, nó phải quét tất cả các hàng của bảng, vì vậy người lập kế hoạch đã chọn sử kèo bóng đá c1 gói quét tuần tự đơn giản. Các số được trích dẫn trong ngoặc đơn (từ trái sang phải):
Chi phí khởi nghiệp ước tính. Đây là thời gian được sử kèo bóng đá c1 trước khi pha đầu ra có thể bắt đầu, ví dụ: thời gian để thực hiện sắp xếp trong một nút sắp xếp.
13033_13260Giới hạnVí dụ bên dưới).
Số lượng kèo bóng đá c1 ước tính đầu ra theo nút kế hoạch này. Một lần nữa, nút được giả định là chạy để hoàn thành.
Độ rộng trung bình ước tính của đầu ra kèo bóng đá c1 theo nút kế hoạch này (tính bằng byte).
Chi phí được đo bằng các đơn vị tùy ý được xác định bởi các tham số chi phí của kèo bóng đá c1 (xemPhần 18.7.2). Thực tiễn truyền thống là để đo lường chi phí trong kèo bóng đá c1 đơn vị của trang đĩa Fetches; đó là,SEQ_PAGE_COSTđược đặt thành thông thường1.0và kèo bóng đá c1 tham số chi phí khác được đặt liên quan đến điều đó. kèo bóng đá c1 ví dụ trong phần này được chạy với kèo bóng đá c1 tham số chi phí mặc định.
14056_14557
Thekèo bóng đá c1Giá trị là một chút khó khăn vì nó không phải là số lượng kèo bóng đá c1 được xử lý hoặc quét bởi nút kế hoạch, mà là số phát ra từ nút. Điều này thường ít hơn số được quét, do kết quả của việc lọc bởi bất kỳWHERE-Phout điều kiện đang được áp kèo bóng đá c1 tại nút. 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 sự được trả về, cập nhật hoặc bị xóa bởi truy vấn.
Trở về ví dụ của chúng tôi:
Giải kèo bóng đá c1 Chọn * từ Tenk1; Kế hoạch truy vấn --------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..458.00 hàng = 10000 chiều rộng = 244)
Những con số này có nguồn gốc rất đơn giản. Nếu bạn làm:
15375_15442
Bạn sẽ tìm thấy điều đóTENK1
có 358 trang đĩa và 10000 kèo bóng đá c1. Chi phí ước tính được tính là (các trang đĩa đọc *SEQ_PAGE_COST) + (kèo bóng đá c1 được quét *cpu_tuple_cost). Theo mặc định,SEQ_PAGE_COSTlà 1.0 vàCPU_Tuple_Costlà 0,01, vì vậy chi phí ước tính là (358 * 1.0) + (10000 * 0,01) = 458.
Bây giờ hãy sửa đổi truy vấn để thêmWHEREđiều kiện:
Giải kèo bóng đá c1 Chọn * từ Tenk1 trong đó độc đáo1 <7000; Kế hoạch truy vấn -------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..483.00 hàng = 7001 chiều rộng = 244) Bộ lọc: (độc đáo1 <7000)
Lưu ý rằngGiải kèo bóng đá c1Đầu ra hiển thịWHEREmệnh đề được áp kèo bóng đá c1 dưới dạng"Bộ lọc"Điều kiện được gắn vào nút Kế hoạch quét SEQ. Điều này có nghĩa là nút kế hoạch kiểm tra điều kiện cho mỗi kèo bóng đá c1 mà nó quét và chỉ xuất ra các nút vượt qua điều kiện. Ước tính các kèo bóng đá c1 đầu ra đã được giảm doWHEREmệnh đề. Tuy nhiên, quét vẫn sẽ phải truy cập tất cả 10000 kèo bóng đá c1, vì vậy chi phí chưa giảm; Trên thực tế, nó đã tăng lên một chút (bằng 10000 *CPU_OPERATOR_COSTWHEREđiều kiện.
Số lượng kèo bóng đá c1 thực tế mà truy vấn này sẽ chọn là 7000, nhưngkèo bóng đá c117140_17302Phân tíchlệnh, vì kèo bóng đá c1 số liệu thống kê được tạo bởiPhân tíchđược lấy từ kèo bóng đá c1 mẫu ngẫu nhiên của bảng.
Bây giờ, hãy làm cho điều kiện hạn chế hơn:
Giải kèo bóng đá c1 Chọn * từ TENK1 trong đó độc đáo1 <100; Kế hoạch truy vấn ------------------------------------------------------------------------------------------ Quét heap bitmap trên TENK1 (chi phí = 5.07..229,20 hàng = 101 chiều rộng = 244) RECHECK cond: (độc đáo1 <100) - Quét chỉ mục bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..5.04 hàng = 101 chiều rộng = 0) Index Cond: (độc đáo1 <100)
17948_18569"Bitmap"Được đề cập trong tên nút là cơ chế sắp xếp.)
Bây giờ hãy thêm kèo bóng đá c1 điều kiện khác vàoWHEREmệnh đề:
Giải kèo bóng đá c1 Chọn * từ TENK1 trong đó độc đáo1 <100 và StringU1 = 'xxx'; Kế hoạch truy vấn ------------------------------------------------------------------------------------------ Bitmap Heap Scan trên TENK1 (chi phí = 5.04..229,43 hàng = 1 chiều rộng = 244) RECHECK cond: (độc đáo1 <100) Bộ lọc: (StringU1 = 'xxx' :: name) - Quét chỉ mục bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..5.04 hàng = 101 chiều rộng = 0) Index Cond: (độc đáo1 <100)
Điều kiện được thêm vàoStringU1 = 'xxx'Giảm ước tính số lượng kèo bóng đá c1 đầ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 một bộ kèo bóng đá c1. Lưu ý rằng19453_1946319466_19549độc đáo1Cột. Thay vào đó, nó được áp kèo bóng đá c1 như một bộ lọc trên các hàng được lấy bởi chỉ mục. Do đó, chi phí thực sự đã tăng lên một chút để phản ánh việc kiểm tra thêm này.
Trong một số trường hợp, người lập kế hoạch sẽ kèo bóng đá c1"đơn giản"kèo bóng đá c1 quét chỉ mục:
Giải kèo bóng đá c1 Chọn * từ Tenk1 trong đó độc đáo1 = 42; Kế hoạch truy vấn ------------------------------------------------------------------------------------- Quét chỉ mục bằng TENK1_UNIQUE1 trên TENK1 (chi phí = 0,29..8.30 hàng = 1 chiều rộng = 244) Chỉ mục cond: (độc đáo1 = 42)
Trong loại kế hoạch này, các hàng bảng được tìm nạp theo thứ tự chỉ mục, điều này khiến chúng còn đắt hơn để đọc, nhưng có rất ít chi phí để sắp xếp các vị trí hàng không đáng giá. Bạn thường thấy loại kế hoạch này cho các truy vấn chỉ lấy một hàng. Nó cũng thường được sử kèo bóng đá c1 cho các truy vấn cóĐặt kèo bóng đá c1 bởiĐiều kiện phù hợp với thứ tự chỉ mục, vì sau đó không cần bước sắp xếp bổ sung để đáp ứngĐặt kèo bóng đá c1 bởi.
Nếu có kèo bóng đá c1 chỉ mục riêng biệt trên một số cột được tham chiếu trongWHERE, Người lập kế hoạch có thể chọn sử kèo bóng đá c1 và hoặc hoặc kết hợp các chỉ mục:
20842_21505
21513_21736
Đây là một ví dụ hiển thị kèo bóng đá c1 hiệu ứng củagiới hạn:
Giải kèo bóng đá c1 Chọn * từ TENK1 trong đó độc đáo1 <100 và độc đáo2 9000 giới hạn 2; Kế hoạch truy vấn --------------------------------------------------------------------------------------------- Giới hạn (chi phí = 0,29..14,48 hàng = 2 chiều rộng = 244) - Quét chỉ mục bằng TENK1_UNIQUE2 trên TENK1 (chi phí = 0,29..71,27 hàng = 10 chiều rộng = 244) Index Cond: (độc đáo2 9000) Bộ lọc: (độc đáo1 <100)
Đây là cùng kèo bóng đá c1 truy vấn như trên, nhưng chúng tôi đã thêm Agiới hạnđể không phải tất cả các kèo bóng đá c1 cần được truy xuất và người lập kế hoạch đã thay đổi suy nghĩ về những việc cần làm. Lưu ý rằng tổng chi phí và số lượng kèo bóng đá c1 của nút quét chỉ mục được hiển thị như thể nó đã được chạy để hoàn thành. Tuy nhiên, nút giới hạn dự kiến sẽ dừng sau khi chỉ lấy một phần năm trong số các kèo bóng đá c1 đó, vì vậy tổng chi phí của nó chỉ là một phần năm và đó là chi phí ước tính thực tế của truy vấn. Kế hoạch này được ưu tiên hơn khi thêm một nút giới hạn vào kế hoạch trước đó vì giới hạn không thể tránh trả chi phí khởi động của quét bitmap, vì vậy tổng chi phí sẽ là một cái gì đó trên 25 đơn vị với phương pháp đó.
Hãy thử tham gia hai bảng, sử kèo bóng đá c1 các cột chúng tôi đã thảo luận:
Giải kèo bóng đá c1 Chọn * Từ Tenk1 T1, Tenk2 T2 Trong đó t1.Unique1 <10 và t1.Unique2 = t2.unique2; Kế hoạch truy vấn -------------------------------------------------------------------------------------------------- Vòng lặp lồng nhau (chi phí = 4,65..118,62 hàng = 10 chiều rộng = 488) - Quét heap bitmap trên tenk1 t1 (chi phí = 4,36..39,47 hàng = 10 chiều rộng = 244) RECHECK COND: (độc đáo1 <10) - Quét chỉ mục bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..4.36 hàng = 10 chiều rộng = 0) Index Cond: (độc đáo1 <10) - Quét chỉ mục bằng TENK2_UNIQUE2 trên TENK2 T2 (chi phí = 0,29..7,91 hàng = 1 chiều rộng = 244) INDEX cond: (độc đáo2 = t1.unique2)
Trong kèo bóng đá c1 này, chúng tôi có nút nối vòng lồng nhau với hai lần quét bảng làm đầu vào hoặc trẻ em. Sự thụt của các dòng tóm tắt nút phản ánh cấu trúc cây kèo bóng đá c1. Đầu tiên của tham gia, hoặc"Outer", con là một bản quét bitmap tương tự như những gì chúng ta đã thấy trước đây. Chi phí và số lượng kèo bóng đá c1 của nó giống như chúng ta nhận được từChọn ... trong đó độc đáo1 <10Bởi vì chúng tôi đang áp kèo bóng đá c1WHEREmệnh đềđộc đáo1 <10Tại nút đó. Thet1.Unique2 = t2.unique2mệnh đề chưa liên quan, vì vậy nó không ảnh hưởng đến số lượng kèo bóng đá c1 của quét bên ngoài. Nút nối vòng lặp lồng nhau sẽ chạy thứ hai hoặc"bên trong"Đứa trẻ một lần cho mỗi kèo bóng đá c1 thu được từ đứa trẻ bên ngoài. Các giá trị cột từ kèo bóng đá c1 bên ngoài hiện tại có thể được cắm vào quét bên trong; Ở đây,t1.Unique2Giá trị từ kèo bóng đá c1 bên ngoài có sẵn, vì vậy chúng tôi nhận được một kế hoạch và chi phí tương tự như những gì chúng tôi đã thấy ở trên cho một đơn giảnChọn ... trong đó t2.unique2 =hằng sốtrường hợp. (Chi phí ước tính thực sự thấp hơn kèo bóng đá c1 chút so với những gì đã thấy ở trên, do kết quả của bộ nhớ đệm dự kiến sẽ xảy ra trong quá trình quét chỉ số lặp đi lặp lại trênT2)
Trong ví dụ này, số lượng kèo bóng đá c1 đầu ra của tham gia giống như sản phẩm của hai lần quét của hai lần quét, nhưng điều đó không đúng trong mọi trường hợp vì có thể có thêmWHERECác điều khoản đề cập đến cả hai bảng và do đó chỉ có thể được áp kèo bóng đá c1 tại điểm nối, không phải để quét đầu vào. Đây là một ví dụ:
25594_26408
Điều kiệnt1.hundred <t2.hundredKhông thể kiểm tra trongtenk2_unique2INDEX, vì vậy nó được áp kèo bóng đá c1 tại nút nối. Điều này làm giảm số lượng hàng đầu ra ước tính của nút nối, nhưng không thay đổi quét đầu vào.
Lưu ý rằng ở đây người lập kèo bóng đá c1 đã chọn để"Vật chất hóa"Mối quan hệ bên trong của tham gia, bằng cách đặt một nút kèo bóng đá c1 vật chất hóa trên nó. Điều này có nghĩa làT2SCAN INDEX sẽ được thực hiện chỉ một lần, mặc dù nút nối vòng lặp lồng nhau cần đọc dữ liệu đó mười lần, một lần cho mỗi kèo bóng đá c1 từ quan hệ bên ngoài. Nút vật chất sẽ lưu dữ liệu trong bộ nhớ khi đọc và sau đó trả về dữ liệu từ bộ nhớ trên mỗi lần truyền tiếp theo.
Khi giao dịch với các kết nối bên ngoài, bạn có thể thấy các nút kèo bóng đá c1 tham gia với cả hai"Tham gia bộ lọc"và đồng bằng"Filter"Điều kiện đính kèm. Tham gia kèo bóng đá c1 điều kiện bộ lọc đến từ bên ngoài tham giatrênmệnh đề, do đó, một hàng không thành công điều kiện bộ lọc nối vẫn có thể được phát ra dưới dạng hàng null. Nhưng một điều kiện bộ lọc đơn giản được áp kèo bóng đá c1 sau các quy tắc tham gia bên ngoài và do đó có tác kèo bóng đá c1 loại bỏ các hàng vô điều kiện. Trong một tham gia bên trong, không có sự khác biệt về ngữ nghĩa giữa các loại bộ lọc này.
Nếu chúng ta thay đổi tính chọn lọc của truy vấn một chút, chúng ta có thể nhận được một kèo bóng đá c1 tham gia rất khác:
Giải kèo bóng đá c1 Chọn * Từ Tenk1 T1, Tenk2 T2 Trong đó t1.Unique1 <100 và t1.Unique2 = t2.unique2; Kế hoạch truy vấn ------------------------------------------------------------------------------------------------------ Băm tham gia (chi phí = 230.47..713,98 hàng = 101 chiều rộng = 488) Hash Cond: (T2.Unique2 = T1.Unique2) - SEQ SCAN trên TENK2 T2 (chi phí = 0,00..445,00 hàng = 10000 chiều rộng = 244) - băm (chi phí = 229,20..229,20 hàng = 101 chiều rộng = 244) - Quét heap bitmap trên tenk1 t1 (chi phí = 5.07..229,20 hàng = 101 chiều rộng = 244) RECHECK cond: (độc đáo1 <100) - Quét chỉ mục bitmap trên TENK1_UNIQUE1 (chi phí = 0,00..5.04 hàng = 101 chiều rộng = 0) Index Cond: (độc đáo1 <100)
Ở đây, người lập kế hoạch đã chọn sử kèo bóng đá c1 tham gia băm, trong đó các hàng của một bảng được nhập vào bảng băm trong bộ nhớ, sau đó bảng khác được quét và bảng băm được thử nghiệm cho các trận đấu với mỗi hàng. Một lần nữa lưu ý cách thụt đầu tư phản ánh cấu trúc kế hoạch: quét bitmap trênTENK1là đầu vào của nút băm, cấu trúc bảng băm. Sau đó, được trả lại cho nút nối băm, đọc các kèo bóng đá c1 từ gói con bên ngoài của nó và tìm kiếm bảng băm cho mỗi cái.
kèo bóng đá c1 loại tham gia khác có thể là kèo bóng đá c1 sự hợp nhất tham gia, được minh họa ở đây:
Giải kèo bóng đá c1 Chọn * Từ Tenk1 T1, Onek T2 Trong đó t1.Unique1 <100 và t1.Unique2 = t2.unique2; Kế hoạch truy vấn ------------------------------------------------------------------------------------------------------ Hợp nhất tham gia (chi phí = 198.11..268.19 hàng = 10 chiều rộng = 488) Hợp nhất cond: (t1.unique2 = t2.unique2) - Quét chỉ mục bằng TENK1_UNIQUE2 trên TENK1 T1 (chi phí = 0,29..656.28 hàng = 101 chiều rộng = 244) Bộ lọc: (độc đáo1 <100) - Sắp xếp (chi phí = 197.83..200.33 hàng = 1000 chiều rộng = 244) Key Key: T2.Unique2 - SEQ SCAN trên Onek T2 (chi phí = 0,00..148.00 hàng = 1000 chiều rộng = 244)
Merge tham gia yêu cầu dữ liệu đầu vào của nó được sắp xếp trên các phím tham gia. Trong kèo bóng đá c1 nàyTENK1Dữ liệu được sắp xếp bằng cách sử dụng quét chỉ mục để truy cập các hàng theo đúng thứ tự, nhưng quét và sắp xếp tuần tự được ưa kèo bóng đá c1 choOnek, bởi vì có nhiều kèo bóng đá c1 khác được truy cập trong bảng đó. .
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ải coi thường bất kỳ chiến lược nào mà nó nghĩ là rẻ nhất, sử kèo bóng đá c1 các cờ Bật/Vô hiệu hóa được mô tả trongPhần 18.7.1. (Đây là kèo bóng đá c1 công cụ thô, nhưng hữu ích. Xem thêmPhần 14.3.) Ví dụ, nếu chúng ta không tin rằng quét liên tiếp là cách tốt nhất để đối phó với bảngOnekTrong ví dụ trước, chúng ta có thể thử
30862_31438
trong đó cho thấy người lập kèo bóng đá c1 nghĩ rằng sắp xếpOnekbằng cách quét chỉ số đắt hơn khoảng 12% so với quét liên tiếp. Tất nhiên, câu hỏi tiếp theo là liệu nó có đúng về điều đó không. Chúng ta có thể điều tra rằng bằng cách sử kèo bóng đá c1Giải kèo bóng đá c1 Phân tích, như được thảo luận dưới đây.
Có thể kiểm tra độ chính xác của ước tính của người lập kế hoạch bằng cách sử kèo bóng đá c1Giải kèo bóng đá c1'sPhân tíchTùy chọn. Với tùy chọn này,Giải kèo bóng đá c132125_32291Giải kèo bóng đá c1Hiển thị. Ví dụ: chúng ta có thể nhận được kết quả như thế này:
32399_33361
Lưu ý rằng"Thời gian thực tế"33423_33479chi phíƯớc tính được thể hiện bằng các đơn vị tùy ý; Vì vậy, họ không có khả năng phù hợp. Điều thường quan trọng nhất để tìm kiếm là liệu số lượng kèo bóng đá c1 ước tính có hợp lý gần với thực tế hay không. Trong ví dụ này, các ước tính đều chết, nhưng điều đó khá bất thường trong thực tế.
Trong một số gói truy vấn, có thể thực hiện một nút con được thực thi nhiều lần. Ví dụ: quét chỉ mục bên trong sẽ được thực hiện một lần trên mỗi kèo bóng đá c1 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,vòng lặpGiá trị báo cáo tổng số thực thi của nút và giá trị thời gian và kèo bóng đá c1 thực đượ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ố tương đương với cách mà ước tính chi phí được hiển thị. Nhân vớivòng lặpGiá trị để có được tổng thời gian thực sự được sử kèo bóng đá c1 trong nút. Trong ví dụ trên, chúng tôi đã chi tổng cộng 0,220 mili giây để thực hiện các lần quét chỉ mục trênTENK2.
Trong kèo bóng đá c1 số trường hợpGiải kèo bóng đá c1 Phân tíchHiển thị số liệu thống kê thực thi bổ sung ngoài thời gian thực hiện nút kế hoạch và số lượng kèo bóng đá c1. Ví dụ: các nút sắp xếp và băm cung cấp thêm thông tin:
34718_36107
Nút sắp xếp hiển thị phương thức sắp xếp được sử kèo bóng đá c1 (đặc biệt, cho dù sắp xếp là trong bộ nhớ hay trên đĩa) và lượng bộ nhớ hoặc không gian đĩa cần thiết. Nút băm hiển thị số lượng thùng băm và lô cũng như lượng bộ nhớ cực đại được sử kèo bóng đá c1 cho bảng băm. (Nếu số lượng lô vượt quá một, cũng sẽ có cách sử kèo bóng đá c1 không gian đĩa liên quan, nhưng điều đó không được hiển thị.)
Một loại thông tin bổ sung khác là số lượng kèo bóng đá c1 bị xóa bởi điều kiện bộ lọc:
Giải kèo bóng đá c1 Phân tích Chọn * từ Tenk1 trong đó mười <7; Kế hoạch truy vấn ------------------------------------------------------------------------------------------------------------------------- SEQ SCAN trên TENK1 (chi phí = 0,00..483.00 hàng = 7000 chiều rộng = 244) (thời gian thực tế = 0,016..5.107 hàng = 7000 vòng = 1) Bộ lọc: (mười <7) Hàng bị xóa bởi bộ lọc: 3000 Thời gian lập kế hoạch: 0,083 ms Thời gian thực hiện: 5.905 ms
Các số này có thể đặc biệt có giá trị cho các điều kiện lọc được áp kèo bóng đá c1 tại các nút nối. The"Đã xóa kèo bóng đá c1"Dòng chỉ xuất hiện khi ít nhất một kèo bóng đá c1 được quét hoặc cặp tham gia tiềm năng trong trường hợp của nút nối, bị từ chối bởi điều kiện bộ lọc.
kèo bóng đá c1 trường hợp tương tự như điều kiện bộ lọc xảy ra với"Mất"37409_37500
37523_37988
Người lập kế hoạch nghĩ (khá chính xác) rằng bảng mẫu này quá nhỏ để làm phiền với việc quét chỉ mục, vì vậy chúng tôi có một lần quét tuần tự đơn giản trong đó tất cả các kèo bóng đá c1 bị từ chối bởi điều kiện lọc. Nhưng nếu chúng ta buộc phải quét chỉ mục, chúng ta sẽ thấy:
Đặt enable_seqscan TẮT; Giải kèo bóng đá c1 Phân tích Chọn * từ polygon_tbl trong đó f1 @ polygon '(0,5,2.0)'; Kế hoạch truy vấn ------------------------------------------------------------------------------------------------------------------------------------------ Quét chỉ số bằng Gpolygonind vào polygon_tbl (chi phí = 0,13..8.15 hàng = 1 chiều rộng = 32) (thời gian thực tế = 0,062..0.062 hàng = 0 vòng = 1) Chỉ mục Cond: (f1 @ '((0,5,2))' :: Polygon) Hàng bị xóa bằng cách kiểm tra lại chỉ mục: 1 Thời gian lập kế hoạch: 0,034 ms Thời gian thực hiện: 0.144 ms
Ở đây chúng ta có thể thấy rằng chỉ mục đã trả lại một kèo bóng đá c1 ứng cử viên, sau đó bị từ chối bởi một điều kiện kiểm tra lại. Điều này xảy ra bởi vì một chỉ mục ý chính là"Mất"Đối với các bài kiểm tra ngăn chặn đa giác: Nó thực sự trả về các kèo bóng đá c1 với các đa giác chồng lên mục tiêu, và sau đó chúng ta phải thực hiện kiểm tra ngăn chặn chính xác trên các kèo bóng đá c1 đó.
Giải kèo bóng đá c1cóbộ đệmtùy chọn có thể được sử kèo bóng đá c1 vớiPhân tíchĐể có thêm số liệu thống kê thời gian chạy hơn:
Giải kèo bóng đá c1 (phân tích, bộ đệm) Chọn * từ TENK1 trong đó độc đáo1 <100 và độc đáo2 9000; Kế hoạch truy vấn ---------------------------------------------------------------------------------------------------------------------------------------------------------- Quét heap bitmap trên TENK1 (chi phí = 25,08..60,21 hàng = 10 chiều rộng = 244) (thời gian thực tế = 0.323..0.342 hàng = 10 vòng = 1) RECHECK COND: ((độc đáo1 <100) và (độc đáo2 9000))) Bộ đệm: hit được chia sẻ = 15 - bitmapand (chi phí = 25,08..25,08 hàng = 10 chiều rộng = 0) (thời gian thực tế = 0,309..0.309 hàng = 0 vòng = 1) Bộ đệm: chia sẻ hit = 7 - Quét chỉ số bitmap trên tenk1_unique1 (chi phí = 0,00..5,04 hàng = 101 chiều rộng = 0) (thời gian thực tế = 0,043..0.043 hàng = 100 vòng = 1) Index Cond: (độc đáo1 <100) Bộ đệm: chia sẻ hit = 2 - Quét chỉ số bitmap trên tenk1_unique2 (chi phí = 0,00..19,78 hàng = 999 chiều rộng = 0) (thời gian thực tế = 0,227..0.227 hàng = 999 vòng = 1) Index Cond: (độc đáo2 9000) Bộ đệm: chia sẻ hit = 5 Thời gian lập kế hoạch: 0,088 ms Thời gian thực hiện: 0.423 ms
kèo bóng đá c1 số được cung cấp bởibộ đệm40556_40628
Hãy nhớ rằng vìGiải kèo bóng đá c1 Phân tích40700_4085840876_40885Dữ liệu. Nếu bạn muốn phân tích truy vấn biến đổi dữ liệu mà không cần thay đổi bảng, bạn có thể cuộn lệnh lại sau đó, ví dụ:
41050_41841
Như đã thấy trong ví dụ này, khi truy vấn làChèn, Cập nhật41959_41966XóaLệnh, công việc thực tế của việc áp kèo bóng đá c1 các thay đổi bảng được thực hiện bằng một nút chèn, cập nhật hoặc xóa cấp độ cao nhất. Các nút kế hoạch bên dưới nút này thực hiện công việc định vị các hàng cũ và/hoặc tính toán dữ liệu mới. Ở trên, chúng ta thấy cùng loại quét bảng bitmap mà chúng ta đã thấy và đầu ra của nó được đưa vào một nút cập nhật lưu trữ các hàng được cập nhật. Điều đáng chú ý là mặc dù nút biến đổi dữ liệu có thể mất một lượng thời gian chạy đáng kể (ở đây, nó tiêu thụ phần của sư tử thời gian), nhưng người lập kế hoạch hiện không thêm bất cứ thứ gì vào ước tính chi phí để tính đến công việc đó. Đó là bởi vì công việc phải làm là giống nhau cho mọi kế hoạch truy vấn chính xác, vì vậy nó không ảnh hưởng đến các quyết định lập kế hoạch.
KhiCập nhậthoặcXóaLệnh ảnh hưởng đến hệ thống phân cấp kế thừa, đầu ra có thể trông như thế này:
Giải kèo bóng đá c1 Cập nhật cha mẹ F2 = F2 + 1 trong đó F1 = 101; Kế hoạch truy vấn ------------------------------------------------------------------------------------------- Cập nhật trên cha mẹ (chi phí = 0,00..24,53 hàng = 4 chiều rộng = 14) Cập nhật về cha mẹ Cập nhật về trẻ em1 Cập nhật về trẻ em2 Cập nhật về trẻ em3 - SEQ SCAN trên cha mẹ (chi phí = 0,00..0.00 hàng = 1 chiều rộng = 14) Bộ lọc: (F1 = 101) - Quét chỉ mục bằng trẻ em Chỉ mục Cond: (F1 = 101) - Quét chỉ mục bằng trẻ con Chỉ mục Cond: (F1 = 101) - Quét chỉ mục bằng trẻ em Chỉ mục cond: (f1 = 101)
Trong ví dụ này, nút cập nhật cần xem xét ba bảng con cũng như bảng cha mẹ được đề cập ban đầu. Vì vậy, có bốn phân nhóm quét đầu vào, một trên mỗi bảng. Để rõ ràng, nút cập nhật được chú kèo bóng đá c1 để hiển thị các bảng mục tiêu cụ thể sẽ được cập nhật, theo thứ tự tương tự như các mẫu con tương ứng. (Những chú kèo bóng đá c1 này là mới nhưPostgreSQL9.5; Trong kèo bóng đá c1 phiên bản trước, người đọc phải trực quan kèo bóng đá c1 bảng mục tiêu bằng cách kiểm tra kèo bóng đá c1 sơ đồ con.)
TheThời gian lập kèo bóng đá c1Hiển thị bởiGiải kèo bóng đá c1 Phân tíchlà thời gian cần thiết để tạo kèo bóng đá c1 truy vấn từ truy vấn được phân tích cú pháp và tối ưu hóa nó. Nó không bao gồm phân tích cú pháp hoặc viết lại.
TheThời gian thực hiệnHiển thị bởiGiải kèo bóng đá c1 Phân tíchBao gồm thời gian khởi động và tắt máy thực thi, cũng như thời gian để chạy bất kỳ yếu tố kích hoạt nào được bắn, nhưng nó không bao gồm phân tích cú pháp, viết lại hoặc lập kèo bóng đá c1 thời gian. Thời gian dành để thực hiệntrướcTriggers, nếu có, được bao gồm trong thời gian cho nút chèn, cập nhật hoặc xóa liên quan; Nhưng thời gian dành cho việc thực hiệnsauTriggers không được tính ở đó vìsauKích hoạt được bắn sau khi hoàn thành toàn bộ kèo bóng đá c1. Tổng thời gian dành cho mỗi lần kích hoạt (trướchoặcsau) cũng được hiển thị riêng. Lưu ý rằng kèo bóng đá c1 kích hoạt ràng buộc hoãn lại sẽ không được thực thi cho đến khi kết thúc giao dịch và do đó không được xem xét bởiGiải kèo bóng đá c1 Phân tích.
Có hai cách quan trọng trong đó thời gian chạy được đo bằngGiải kèo bóng đá c1 Phân tíchcó thể đi chệch khỏi việc thực hiện bình thường của cùng một truy vấn. Đầu tiên, vì không có kèo bóng đá c1 đầu ra nào được cung cấp cho máy khách, chi phí truyền mạng và chi phí chuyển đổi I/O không được bao gồm. Thứ hai, chi phí đo được thêm vào bởiGiải kèo bóng đá c1 Phân tíchcó thể có ý nghĩa, đặc biệt là trên kèo bóng đá c1 máy có chậmgetTimeOfday ()
Cuộc gọi hệ điều hành. Bạn có thể sử kèo bóng đá c1PostgreSQL: TàiCông cụ để đo chi phí thời gian trên hệ thống của bạn.
Giải kèo bóng đá c1Kết quả không nên được ngoại suy đến các tình huống khác nhiều so với trường hợp bạn thực sự đang thử nghiệm; Ví dụ, kết quả trên một bàn có kích thước đồ chơi không thể được giả định để áp kèo bóng đá c1 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ó thể chọn một kế hoạch khác cho một bảng lớn hơn hoặc nhỏ hơn. Một ví dụ cực đoan là trên một bảng chỉ chiếm một trang đĩa, gần như bạn sẽ luôn nhận được một kế hoạch quét tuần tự cho dù chỉ mục có sẵn hay không. Người lập kế hoạch nhận ra rằng sẽ mất một trang một trang để xử lý bảng trong mọi trường hợp, do đó, không có giá trị trong việc sử kèo bóng đá c1 các lần đọc trang bổ sung để xem một chỉ mục. (Chúng tôi đã thấy điều này xảy ra trongpolygon_tblVí dụ ở trên.)
Có những trường hợp trong đó các giá trị thực tế và ước tính sẽ không phù hợp tốt, nhưng không có gì thực sự sai. Một trường hợp như vậy xảy ra khi thực hiện nút kèo bóng đá c1 bị dừng ngắn bởigiới hạnhoặc hiệu ứng tương tự. Ví dụ, tronggiới hạnTruy vấn chúng tôi đã sử kèo bóng đá c1 trước đó,
47159_47829
47837_48219
48225_48650Giới hạn. Ngoài ra, nếu con bên ngoài (thứ nhất) chứa các hàng có giá trị khóa trùng lặp, thì con bên trong (thứ hai) được sao lưu và kèo bóng đá c1 cứu cho phần của các hàng phù hợp với giá trị khóa đó.Giải kèo bóng đá c1 Phân tíchđếm các phát thải lặp đi lặp lại này có cùng các kèo bóng đá c1 bên trong như thể chúng là các kèo bóng đá c1 bổ sung thực sự. Khi có nhiều bản sao bên ngoài, số lượng kèo bóng đá c1 thực tế được báo cáo cho nút Kế hoạch con bên trong có thể lớn hơn đáng kể so với số lượng kèo bóng đá c1 thực sự trong mối quan hệ bên trong.
Các nút bitmapand và bitmapor luôn báo cáo số lượng kèo bóng đá c1 thực của chúng là số không, do giới hạn thực hiện.