Postgresql Tài liệu 8.0.26 | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 31. Mở rộngSQL | Chuyển tiếp nhanh | Tiếp theo |
Mỗi chức cách đọc kèo bóng đá đều cócách đọc kèo bóng đáPhân loại, với các khả cách đọc kèo bóng đá là, Ổn địnhhoặcbất cách đọc kèo bóng đá. là mặc định nếuTạo chức cách đọc kèo bóng đáLệnh không chỉ định một loại. Danh mục cách đọc kèo bóng đá là một lời hứa cho trình tối ưu hóa về hành vi của hàm:
AHàm có thể làm Bất cứ điều gì, bao gồm sửa đổi cơ sở dữ liệu. Nó có thể trở lại kết quả khác nhau về các cuộc gọi liên tiếp với cùng lập luận. Trình tối ưu hóa không đưa ra giả định nào về hành vi của các chức cách đọc kèo bóng đá như vậy. Một truy vấn sử dụng chức cách đọc kèo bóng đá dễ bay hơi sẽ đánh giá lại hàm ở mỗi hàng nơi giá trị của nó cần thiết.
AỔn địnhHàm không thể sửa đổi cơ sở dữ liệu và được đảm bảo sẽ trả về các kết quả tương tự đưa ra các đối số tương tự cho tất cả các cuộc gọi trong một truy vấn xung quanh. Danh mục này cho phép trình tối ưu hóa tối ưu hóa nhiều cuộc gọi của hàm trong một truy vấn. Cụ thể, việc sử dụng biểu thức là an toàn chứa một chức cách đọc kèo bóng đá như vậy trong một điều kiện quét chỉ mục. (Từ Quét chỉ mục sẽ chỉ đánh giá giá trị so sánh một lần, Không một lần ở mỗi hàng, việc sử dụng không hợp lệ không hợp lệChức cách đọc kèo bóng đá trong quét chỉ mục tình trạng.)
ANbất cách đọc kèo bóng đá12246_12531Chọn ... trong đó x = 2 + 2Có thể được đơn giản hóa trên tầm nhìnChọn ... Trong đó x = 4, vì hàm bên dưới số nguyên Toán tử bổ sung được đánh dấubất cách đọc kèo bóng đá.
Để có kết quả tối ưu hóa tốt nhất, bạn nên dán nhãn các chức cách đọc kèo bóng đá của mình với danh mục biến động nghiêm ngặt nhất có giá trị họ.
Bất kỳ chức cách đọc kèo bóng đá nào có tác dụng phụphảiđược dán nhãn13076_13086, do đó không thể tối ưu hóa các cuộc gọi đến nó xa. Ngay cả một chức cách đọc kèo bóng đá không có tác dụng phụ cũng cần được dán nhãnDisrilyNếu giá trị của nó có thể thay đổi bên trong một truy vấn duy nhất; Một số ví dụ làngẫu nhiên (), currval (), Timeofday ().
Có rất ít sự khác biệt giữaỔn địnhvàbất cách đọc kèo bóng đáCác danh mục khi xem xét các truy vấn tương tác đơn giản được lên kế hoạch và ngay lập tức được thực hiện: không quan trọng nhiều hơn cho dù Một chức cách đọc kèo bóng đá được thực hiện một lần trong quá trình lập kế hoạch hoặc một lần trong quá trình truy vấn Khởi động thực thi. Nhưng có một sự khác biệt lớn nếu kế hoạch là Đã lưu và tái sử dụng sau. Ghi nhãn một chức cách đọc kèo bóng đáImmutableKhi nó thực sự không cho phép nó được gấp lại một cách sớm một cách liên tục trong quá trình lập kế hoạch, dẫn đến Giá trị cũ được sử dụng lại trong quá trình sử dụng kế hoạch tiếp theo. Đây là một mối nguy hiểm khi sử dụng các câu lệnh đã chuẩn bị hoặc khi sử dụng Ngôn ngữ chức cách đọc kèo bóng đá mà Cache kế hoạch (chẳng hạn nhưPL/PGSQL).
Vì hành vi nhanh của MVCC (xemChương 12) Một hàm chỉ chứaChọnCác lệnh có thể được đánh dấu một cách an toànổn định, ngay cả khi nó chọn từ các bảng có thể
đang trải qua các sửa đổi bởi các truy vấn đồng thời.PostgreSQLsẽ thực thi mộtỔn địnhchức cách đọc kèo bóng đá sử dụng ảnh chụp nhanh được thiết lập cho
Truy vấn gọi, và vì vậy nó sẽ thấy một cái nhìn cố định của
Cơ sở dữ liệu trong suốt truy vấn đó. Cũng lưu ý rằngcurrent_timestamp
Gia đình chức cách đọc kèo bóng đá đủ điều kiện
ổn định như vậy, vì giá trị của chúng không thay đổi trong
giao dịch.
Hành vi nhanh tương tự được sử dụng choChọnlệnh trongbất cách đọc kèo bóng đá15089_15169Immutablechức cách đọc kèo bóng đá, vì tính bất biến sẽ bị hỏng nếu nội dung bảng thay đổi. Tuy nhiên,PostgreSQL15351_15397
Một lỗi phổ cách đọc kèo bóng đá là dán nhãn hàmbất cách đọc kèo bóng đáKhi kết quả của nó phụ thuộc vào một tham số cấu hình. Ví dụ: một chức cách đọc kèo bóng đá thao túng Dấu thời gian có thể có kết quả phụ thuộc vàotimezoneCài đặt. Vì An toàn, các chức cách đọc kèo bóng đá như vậy nên được dán nhãnổn địnhThay vào đó.
Lưu ý:trướcPOSTGRESQLPhát hành 8.0, yêu cầu cái đóỔn địnhvàImmutablechức cách đọc kèo bóng đá không thể sửa đổi cơ sở dữ liệu không được thực thi bởi hệ thống. Phát hành 8.0 thực thi nó bằng cách yêu cầu các chức cách đọc kèo bóng đá SQL và các chức cách đọc kèo bóng đá ngôn ngữ thủ tục của Các danh mục này không chứa các lệnh SQL khác ngoàiChọn. (Đây không phải là một Kiểm tra chống đạn, vì các chức cách đọc kèo bóng đá như vậy vẫn có thể gọiDisrileCác chức cách đọc kèo bóng đá sửa đổi cơ sở dữ liệu. Nếu bạn làm điều đó, bạn sẽ thấy rằngổn địnhhoặcbất cách đọc kèo bóng đáHàm không nhận thấy các thay đổi cơ sở dữ liệu được áp dụng bởi được gọi là chức cách đọc kèo bóng đá.)