Phiên bản 9.4 mới của PostgreSQL (chưa được phát hành tại thời điểm viết bài này) sẽ thêm thời gian lập kế hoạch vào EXPLAIN
và EXPLAIN ANALYZE
và vì vậy bạn sẽ có thể sử dụng chúng.
Đối với các phiên bản cũ hơn, giả định của bạn là đúng, cách tốt hơn để xác định thời gian lập kế hoạch là thực hiện EXPLAIN
đơn giản (không có ANALYZE
) và kiểm tra thời gian mất, trong psql
bạn có thể làm điều đó bằng cách bật \timing
(Tôi thường làm điều đó tại ~/.psqlrc
).
Nhóm tin tặc PostgreSQL đã thảo luận về việc nâng nó lên các giá trị lớn hơn . Nhưng có vẻ như họ không thể đảm bảo rằng nó sẽ tốt cho mọi trường hợp.
Vấn đề là lập kế hoạch để tìm thứ tự tham gia tốt nhất cho N
bảng có O(N!)
cách tiếp cận (giai thừa). Và do đó, những con số tăng rất cao, bạn có thể đơn giản thấy điều đó với truy vấn sau:
$ SELECT i, (i)! AS num_comparisons FROM generate_series(8, 20) i;
i | num_comparisons
----+---------------------
8 | 40320
9 | 362880
10 | 3628800
11 | 39916800
12 | 479001600
13 | 6227020800
14 | 87178291200
15 | 1307674368000
16 | 20922789888000
17 | 355687428096000
18 | 6402373705728000
19 | 121645100408832000
20 | 2432902008176640000
(13 rows)
Như bạn có thể thấy, ở mức mặc định là 8, chúng tôi thực hiện nhiều nhất khoảng 40 nghìn so sánh, 10 mà bạn đề xuất làm cho nó trở thành 3M, vẫn chưa nhiều đối với máy tính hiện đại, nhưng các giá trị tiếp theo bắt đầu trở nên quá lớn, nó chỉ tăng lên quá nhanh, 20 chỉ là điên rồ (21! thậm chí không phù hợp với số nguyên 64 bit).
Tất nhiên, đôi khi bạn có thể đặt nó thành các giá trị lớn hơn như 16, có thể (trên lý thuyết) tạo ra khoảng 20 nghìn tỷ so sánh và vẫn có thời gian lập kế hoạch rất tốt, đó là vì PostgreSQL đã cắt một số đường dẫn trong khi lập kế hoạch và không cần để luôn luôn kiểm tra tất cả các đơn đặt hàng, nhưng giả sử rằng nó sẽ luôn như vậy và đặt các giá trị cao như vậy làm mặc định, có vẻ không phải là một cách tiếp cận tốt đối với tôi. Có thể có một số truy vấn không mong muốn trong tương lai khiến nó phải kiểm tra tất cả các đơn đặt hàng và sau đó bạn chỉ có một truy vấn duy nhất khiến máy chủ của bạn ngừng hoạt động.
Theo kinh nghiệm của tôi, tôi giả định 10 là giá trị mặc định trên bất kỳ cài đặt nào trong các máy chủ tốt, một số trong số đó tôi thậm chí sử dụng 12. Tôi khuyên bạn nên đặt nó thành 10, nếu bạn thích và đôi khi, hãy thử đặt nó cao hơn ( Tôi sẽ không vượt quá 12) và tiếp tục theo dõi (chặt chẽ) để xem nó hoạt động như thế nào.