Mỗi chức tỷ lệ kèo bóng đá tối nay đều cótỷ lệ kèo bóng đá tối nayPhân loại, với các khả tỷ lệ kèo bóng đá tối nay là,
Ổn định
hoặcImmutable
. là mặc định nếuTạo chức tỷ lệ kèo bóng đá tối nayLệnh không chỉ định danh mục. Danh mục tỷ lệ kèo bóng đá tối nay là một lời hứa cho trình tối ưu hóa về hành vi của hàm:
ADisrile
Hàm có thể làm bất cứ điều gì, bao gồm cả việc sửa đổi cơ sở dữ liệu. Nó có thể trả về các kết quả khác nhau cho các cuộc gọi liên tiếp với cùng một đối số. Trình tối ưu hóa không đưa ra giả định về hành vi của các chức tỷ lệ kèo bóng đá tối nay như vậy. Một truy vấn sử dụng hàm dễ bay hơi sẽ đánh giá lại hàm ở mỗi hàng khi cần giá trị của nó.
AỔn định
12163_12624Disrily
chức tỷ lệ kèo bóng đá tối nay trong điều kiện quét chỉ mục.)
ANbất tỷ lệ kèo bóng đá tối nay
12794_13049Chọn ... trong đó x = 2 + 2
có thể được đơn giản hóa khi nhìn đếnChọn ... trong đó x = 4
, vì hàm bên dưới toán tử bổ sung số nguyên được đánh dấubất tỷ lệ kèo bóng đá tối nay
.
Để 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 tỷ lệ kèo bóng đá tối nay của mình với danh mục biến động nghiêm ngặt nhất có giá trị đối với chúng.
Bất kỳ chức tỷ lệ kèo bóng đá tối nay nào có tác dụng phụphảiđược dán nhãnDisrile
, do đó, các cuộc gọi đến nó không thể được tối ưu hóa. Ngay cả một chức tỷ lệ kèo bóng đá tối nay không có tác dụng phụ cũng cần được dán nhãnDisrile
Nếu giá trị của nó có thể thay đổi trong một truy vấn duy nhất; Một số ví dụ làngẫu nhiên ()
, currval ()
, Timeofday ()
.
Một ví dụ quan trọng khác làcurrent_timestamp
Gia đình chức tỷ lệ kèo bóng đá tối nay đủ điều kiện làổn định
, vì giá trị của chúng không thay đổi trong giao dịch.
Có rất ít sự khác biệt giữaổn định
vàbất tỷ lệ kèo bóng đá tối nay
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à thực hiện ngay lập tức: Không quan trọng nhiều cho dù một chức tỷ lệ kèo bóng đá tối nay được thực thi một lần trong quá trình lập kế hoạch hoặc một lần trong quá trình khởi động thực thi truy vấn. Nhưng có một sự khác biệt lớn nếu kế hoạch được lưu và tái sử dụng sau đó. Ghi nhãn một chức tỷ lệ kèo bóng đá tối nayImmutable
Khi nó thực sự không cho phép nó được gấp sớm thành một hằng số 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 tiếp theo của kế hoạch. Đâ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 các ngôn ngữ chức tỷ lệ kèo bóng đá tối nay mà các kế hoạch bộ nhớ cache (chẳng hạn nhưPL/PGSQL).
Đối với các hàm được viết bằng SQL hoặc trong bất kỳ ngôn ngữ thủ tục tiêu chuẩn nào, có một thuộc tính quan trọng thứ hai được xác định bởi danh mục biến động, cụ thể là khả tỷ lệ kèo bóng đá tối nay hiển thị của bất kỳ thay đổi dữ liệu nào được thực hiện bởi lệnh SQL đang gọi hàm. MỘTDisrile
Hàm sẽ thấy những thay đổi đó, Aổn định
hoặcbất tỷ lệ kèo bóng đá tối nay
Hàm sẽ không. Hành vi này được thực hiện bằng cách sử dụng hành vi nhanh của MVCC (xemChương 13):Ổn định
vàImmutable
Các chức tỷ lệ kèo bóng đá tối nay Sử dụng ảnh chụp nhanh được thiết lập khi bắt đầu truy vấn gọi điện, trong khiDisrile
Các chức tỷ lệ kèo bóng đá tối nay có được một ảnh chụp nhanh mới khi bắt đầu mỗi truy vấn mà họ thực hiện.
15901_16033
Vì hành vi nhanh này, một hàm chỉ chứaChọn
Cá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ể trải qua các sửa đổi bằng các truy vấn đồng thời.PostgreSQLSẽ thực thi tất cả các lệnh của Aổn định
Hàm sử dụng ảnh chụp nhanh được thiết lập cho truy vấn gọi điện và do đó nó sẽ thấy một chế độ xem cố định của cơ sở dữ liệu trong suốt truy vấn đó.
Hành vi nhanh tương tự được sử dụng choChọn
lệnh trongImmutable
chức tỷ lệ kèo bóng đá tối nay. Nói chung là không khôn ngoan để chọn từ các bảng cơ sở dữ liệu trong mộtbất tỷ lệ kèo bóng đá tối nay
chức tỷ lệ kèo bóng đá tối nay, vì tính bất biến sẽ bị phá vỡ nếu nội dung bảng thay đổi. Tuy nhiên,PostgreSQLkhông thực thi rằng bạn không làm điều đó.
Một lỗi phổ tỷ lệ kèo bóng đá tối nay là dán nhãn hàmbất tỷ lệ kèo bóng đá tối nay
17084_17236timezoneCài đặt. Để an toàn, các chức tỷ lệ kèo bóng đá tối nay như vậy nên được dán nhãnỔn định
Thay vào đó.
PostgreSQLYêu cầu điều đóổn định
vàImmutable
Các chức tỷ lệ kèo bóng đá tối nay không chứa các lệnh SQL khác ngoàiChọn
Để ngăn chặn sửa đổi dữ liệu. (Đây không phải là một bài kiểm tra hoàn toàn chống đạn, vì các chức tỷ lệ kèo bóng đá tối nay như vậy vẫn có thể gọiDisrily
Các chức tỷ lệ kèo bóng đá tối nay sửa đổi cơ sở dữ liệu. Nếu bạn làm điều đó, bạn sẽ thấy rằngổn định
hoặcbất tỷ lệ kèo bóng đá tối nay
Hàm không nhận thấy các thay đổi cơ sở dữ liệu được áp dụng bởi hàm được gọi, vì chúng bị ẩn khỏi ảnh chụp nhanh của nó.)