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
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.2. Thống kê được sử dụng bởi người lập kế cách đọc kèo bóng đá

14.2.1. Thống kê một cột

Như chúng ta đã thấy trong phần trước, trình lập kế cách đọc kèo bóng đá truy vấn cần ước tính số lượng hàng được truy xuất bằng một truy vấn để đưa ra lựa chọn tốt về các kế cách đọc kèo bóng đá truy vấn. Phần này cung cấp một cái nhìn nhanh về các số liệu thống kê mà hệ thống sử dụng cho các ước tính này.

Một thành phần của số liệu thống kê là tổng số mục trong mỗi bảng và chỉ mục, cũng như số lượng khối đĩa bị chiếm bởi mỗi bảng và chỉ mục. Thông tin này được giữ trong bảngpg_ class, trong các cộtReltuplesRelpages. Chúng ta có thể xem nó với các truy vấn tương tự như thế này:

12603_13090

Ở đây chúng ta có thể thấy rằngTENK1chứa 10000 hàng, cũng như các chỉ mục của nó, nhưng các chỉ mục (không có gì đáng ngạc nhiên) nhỏ hơn nhiều so với bảng.

vì lý do hiệu quả,ReltuplesRelpageskhông được cập nhật khi đang bay, và do đó chúng thường chứa các giá trị hơi lỗi thời. Chúng được cập nhật bởiVACUUM, Phân tích, và một vài lệnh DDL nhưTạo chỉ mục. MỘTVACUUMhoặcPhân tíchHoạt động không quét toàn bộ bảng (thường là trường hợp) sẽ cập nhật tăng dầnReltuplesĐếm trên cơ sở một phần của bảng nó đã quét, dẫn đến một giá trị gần đúng. Trong mọi trường hợp, người lập kế cách đọc kèo bóng đá sẽ mở rộng các giá trị mà nó tìm thấy trongPG_ClassĐể phù hợp với kích thước bảng vật lý hiện tại, do đó có được xấp xỉ gần hơn.

Hầu hết các truy vấn chỉ truy xuất một phần của các hàng trong bảng, doWHERECác điều khoản hạn chế các hàng sẽ được kiểm tra. Do đó, người lập kế cách đọc kèo bóng đá cần ước tínhchọn lọccủaWHERE14501_14576WHEREmệnh đề. Thông tin được sử cách đọc kèo bóng đá cho tác vụ này được lưu trữ trongpg_statisticDanh mục hệ thống. Các mục trongpg_statisticđược cập nhật bởiPhân tíchPhân tích chân khôngCác lệnh và luôn luôn gần đúng ngay cả khi được cập nhật mới.

thay vì nhìn vàopg_statistictrực tiếp, tốt hơn là nhìn vào quan điểm của nópg_statsKhi kiểm tra số liệu thống kê theo cách thủ công.pg_statsđược thiết kế để dễ đọc hơn. Hơn nữa,pg_statsCó thể đọc được bởi tất cả, trong khipg_statistic15590_15753pg_statsXem bị hạn chế chỉ hiển thị các hàng về các bảng mà cách đọc kèo bóng đá dùng hiện tại có thể đọc.) Ví dụ: chúng ta có thể làm:

Chọn Attname, kế thừa, N_Distince,
       Array_TO_String (mest_common_vals, e '\ n') như mest_common_vals
Từ pg_stats
Trong đó tablename = 'đường';

 Attname | kế thừa | n_distince |          Hầu hết_common_vals
---------+-----------+------------+--------------------------------------------
 Tên | f |  -0.363388 | I- 580 RAMP+
         |           |            | I- 880 RAMP+
         |           |            | SP Đường sắt +
         |           |            | I- 580 +
         |           |            | I- 680 đoạn đường nối
 Tên | t |  -0.284859 | I- 880 RAMP+
         |           |            | I- 580 RAMP+
         |           |            | I- 680 RAMP+
         |           |            | I- 580 +
         |           |            | Tiểu bang Hwy 13 đoạn đường nối
(2 hàng)

Lưu ý rằng hai hàng được hiển thị cho cùng một cột, một hàng tương ứng với hệ thống phân cấp kế thừa hoàn chỉnh bắt đầu từđườngBảng (kế thừa=T17189_17229đường17260_17277kế thừa=f).

lượng thông tin được lưu trữ trongpg_statisticbởiPhân tích, đặc biệt là số lượng mục tối đa trongmest_common_valsBiểu đồ_bound17634_17710Thay đổi bảng thống kêlệnh hoặc toàn cầu bằng cách đặtdefault_statistic_targetBiến cấu hình. Giới hạn mặc định hiện là 100 mục. Tăng giới hạn có thể cho phép các ước tính kế cách đọc kèo bóng đá chính xác hơn được thực hiện, đặc biệt đối với các cột có phân phối dữ liệu không đều, với giá tiêu thụ nhiều không gian hơn trongpg_statisticvà nhiều thời gian hơn để tính toán các ước tính. Ngược lại, giới hạn thấp hơn có thể đủ cho các cột có phân phối dữ liệu đơn giản.

Thông tin chi tiết về việc sử dụng số liệu thống kê của kế cách đọc kèo bóng đá có thể được tìm thấy trongChương 71.

14.2.2. Thống kê mở rộng

Người ta thường thấy các truy vấn chậm chạy các kế cách đọc kèo bóng đá thực thi xấu vì nhiều cột được sử dụng trong các mệnh đề truy vấn có tương quan. Người lập kế cách đọc kèo bóng đá thường giả định rằng nhiều điều kiện độc lập với nhau, một giả định không giữ được khi các giá trị cột có tương quan. Thống kê thường xuyên, vì bản chất cột sống ở từng cá nhân của họ, không thể nắm bắt bất kỳ kiến ​​thức nào về tương quan cột chéo. Tuy nhiên,PostgreSQLCó khả năng tính toánThống kê đa biến, có thể nắm bắt thông tin đó.

Bởi vì số lượng cách đọc kèo bóng đát hợp cột có thể là rất lớn, nên tự động tính toán số liệu thống kê đa biến. Thay vì,Đối tượng thống kê mở rộng, thường được gọi là chỉĐối tượng thống kê, có thể được tạo để hướng dẫn máy chủ có được số liệu thống kê trên các bộ cột thú vị.

Đối tượng thống kê được tạo bằng cách sử cách đọc kèo bóng đáTạo số liệu thống kêlệnh. Tạo ra một đối tượng như vậy chỉ đơn thuần tạo ra một mục danh mục thể hiện sự quan tâm đến các số liệu thống kê. Thu thập dữ liệu thực tế được thực hiện bởiPhân tích(có thể là lệnh thủ công hoặc tự động phân tích nền). Các giá trị được thu thập có thể được kiểm tra trongpg_statistic_extDanh mục.

Phân tích20600_21010

Các tiểu mục sau đây mô tả các loại thống kê mở rộng hiện đang được hỗ trợ.

14.2.2.1. Phụ thuộc chức năng

21356_21406phụ thuộc chức năng, một khái niệm được sử cách đọc kèo bóng đá trong các định nghĩa về các hình thức bình thường của cơ sở dữ liệu. Chúng tôi nói rằng cộtBphụ thuộc vào chức năng vào cộtANếu kiến ​​thức về giá trị củaAlà đủ để xác định giá trị củaB, đó là không có hai hàng có cùng giá trịANhưng các giá trị khác nhau củaB. Trong một cơ sở dữ liệu được chuẩn hóa hoàn toàn, các phụ thuộc chức năng chỉ nên tồn tại trên các khóa và siêu tốc chính. Tuy nhiên, trong thực tế, nhiều bộ dữ liệu không được chuẩn hóa hoàn toàn vì nhiều lý do; Tính cố định cố định vì lý do hiệu suất là một ví dụ phổ biến. Ngay cả trong cơ sở dữ liệu được chuẩn hóa hoàn toàn, có thể có mối tương quan một phần giữa một số cột, có thể được biểu thị dưới dạng phụ thuộc một phần chức năng.

Sự tồn tại của các phụ thuộc chức năng ảnh hưởng trực tiếp đến độ chính xác của các ước tính trong các truy vấn nhất định. Nếu một truy vấn chứa các điều kiện trên cả (các) cột phụ thuộc, các điều kiện trên các cột phụ thuộc sẽ không làm giảm thêm kích thước kết quả; Nhưng không có kiến ​​thức về sự phụ thuộc chức năng, người lập kế cách đọc kèo bóng đá truy vấn sẽ cho rằng các điều kiện độc lập, dẫn đến việc đánh giá thấp kích thước kết quả.

Để thông báo cho người lập kế cách đọc kèo bóng đá về các phụ thuộc chức năng,Phân tíchCó thể thu thập các phép đo phụ thuộc cột chéo. Đánh giá mức độ phụ thuộc giữa tất cả các bộ cột sẽ rất tốn kém, vì vậy việc thu thập dữ liệu được giới hạn ở các nhóm cột xuất hiện cùng nhau trong một đối tượng thống kê được xác định vớiphụ thuộcTùy chọn. Nên tạophụ thuộcThống kê chỉ cho các nhóm cột có mối tương quan mạnh, để tránh chi phí không cần thiết trong cả haiPhân tíchvà lập kế cách đọc kèo bóng đá truy vấn sau này.

Đây là một ví dụ về việc thu thập số liệu thống kê phụ thuộc chức năng:

Tạo Stts thống kê (phụ thuộc) trên zip, thành phố từ mã Zipcodes;

Phân tích mã zip;

Chọn StxName, StxKeys, StxDependences
  Từ pg_statistic_ext
  Trong đó stxName = 'stts';
 stxname | Stxkeys |             StxDependencies               
---------+---------+--------------------------------------------------
 STTS | 1 5 | "1 = 5": 1.000000, "5 = 1": 0.423130

Ở đây có thể thấy rằng cột 1 (mã zip) xác định đầy đủ cột 5 (thành phố) vì vậy hệ số là 1.0, trong khi thành phố chỉ xác định mã zip khoảng 42% thời gian, có nghĩa là có nhiều thành phố (58%) được biểu thị bằng nhiều hơn một mã zip.

24219_24438

14.2.2.1.1. Hạn chế của phụ thuộc chức năng

Phụ thuộc chức năng hiện chỉ được áp cách đọc kèo bóng đá khi xem xét các điều kiện bình đẳng đơn giản so sánh các cột với các giá trị không đổi. Chúng không được sử cách đọc kèo bóng đá để cải thiện các ước tính cho các điều kiện bình đẳng so sánh hai cột hoặc so sánh một cột với biểu thức, cũng như các mệnh đề phạm vi,nhưhoặc bất kỳ loại điều kiện nào khác.

Khi ước tính với các phụ thuộc chức năng, người lập kế cách đọc kèo bóng đá giả định rằng các điều kiện trên các cột liên quan là tương thích và do đó dự phòng. Nếu chúng không tương thích, ước tính chính xác sẽ bằng không, nhưng khả năng đó không được xem xét. Ví dụ: đưa ra một truy vấn như

Chọn * Từ ZipCodes trong đó City = 'San Francisco' và Zip = '94105';

Người lập kế cách đọc kèo bóng đá sẽ coi thườngThành phố25556_25664

Chọn * từ ZipCodes trong đó City = 'San Francisco' và Zip = '90210';

Mặc dù sẽ thực sự có hàng không thỏa mãn truy vấn này. Tuy nhiên, thống kê phụ thuộc chức năng không cung cấp đủ thông tin để cách đọc kèo bóng đát luận rằng, tuy nhiên.

Trong nhiều tình huống thực tế, giả định này thường được thỏa mãn; Ví dụ: có thể có GUI trong ứng cách đọc kèo bóng đá chỉ cho phép chọn các giá trị mã thành phố và zip tương thích để sử cách đọc kèo bóng đá trong truy vấn. Nhưng nếu đó không phải là trường hợp, các phụ thuộc chức năng có thể không phải là một tùy chọn khả thi.

14.2.2.2. Số lượng đa biến N-Distince

Thống kê một cột lưu trữ số lượng các giá trị riêng biệt trong mỗi cột. Ước tính số lượng giá trị riêng biệt khi cách đọc kèo bóng đát hợp nhiều hơn một cột (ví dụ: choNhóm bởi A, B) thường xuyên sai khi người lập kế cách đọc kèo bóng đá chỉ có dữ liệu thống kê cột đơn, khiến nó chọn các kế cách đọc kèo bóng đá xấu.

Để cải thiện các ước tính đó,Phân tíchCó thể thu thập số liệu thống kê từ n cho các nhóm cột. Như trước đây, việc làm điều này là không thực tế cho mọi nhóm cột có thể, vì vậy dữ liệu chỉ được thu thập cho các nhóm cột xuất hiện cùng nhau trong một đối tượng thống kê được xác định vớindistinceTùy chọn. Dữ liệu sẽ được thu thập cho từng cách đọc kèo bóng đát hợp có thể của hai hoặc nhiều cột từ tập hợp các cột được liệt kê.

27339_27450

Tạo số liệu thống kê stts2 (ndistince) trên zip, trạng thái, thành phố từ mã Zipcodes;

Phân tích mã zip;

Chọn StxKeys là K, Stxndistince là ND
  Từ pg_statistic_ext
  Trong đó stxName = 'stts2';
-[Ghi 1] ----------------------------------------------------------------
k | 1 2 5
nd | "1, 2": 33178, "1, 5": 33178, "2, 5": 27435, "1, 2, 5": 33178

27844_28189

nên tạondistinceCác đối tượng thống kê chỉ về các kết hợp các cột thực sự được sử dụng để nhóm và trong đó việc đánh giá sai số lượng nhóm đang dẫn đến các kế cách đọc kèo bóng đá xấu. Nếu không,Phân tíchChu kỳ chỉ bị lãng phí.