Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 35. Mở rộngSQL | Tiếp theo |
Mỗi chức tỷ lệ kèo bóng đá 88 đều cótỷ lệ kèo bóng đá 88Phân loại, với các khả tỷ lệ kèo bóng đá 88 là, Ổn địnhhoặcbất biến. là mặc định nếuTạo chức tỷ lệ kèo bóng đá 88Lệnh không Chỉ định một danh mục. Danh mục tỷ lệ kèo bóng đá 88 là một lời hứa cho Trình tối ưu hóa về hành vi của hàm:
Achức tỷ lệ kèo bóng đá 88 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ả về kết quả khác nhau trên 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 giả định về hành vi của các chức tỷ lệ kèo bóng đá 88 như vậy. Một truy vấn sử dụng một Chức tỷ lệ kèo bóng đá 88 dễ bay hơi sẽ đánh giá lại chức tỷ lệ kèo bóng đá 88 ở mỗi hàng giá trị của nó là cần thiết.
AỔn địnhchức tỷ lệ kèo bóng đá 88 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ự được đưa ra Cùng một đối số cho tất cả các hàng trong một câu lệnh. Cái này danh mục cho phép trình tối ưu hóa tối ưu hóa nhiều cuộc gọi của chức tỷ lệ kèo bóng đá 88 cho một cuộc gọi duy nhất. Đặc biệt, việc sử dụng một Biểu thức chứa một chức tỷ lệ kèo bóng đá 88 như vậy trong một điều kiện quét chỉ mục. (Vì 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 tỷ lệ kèo bóng đá 88 trong điều kiện quét chỉ mục.)
ANImmutablechức tỷ lệ kèo bóng đá 88 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ự được đưa ra Cùng những lập luận mãi mãi. Danh mục này cho phép trình tối ưu hóa đánh giá trước chức tỷ lệ kèo bóng đá 88 khi một truy vấn gọi nó với không đổi lập luận. Ví dụ: một truy vấn nhưChọn ... Trong đó x = 2 + 2Có thể đơn giản hóa khi nhìn đếnChọn ... trong đó x = 4, vì chức tỷ lệ kèo bóng đá 88 bên dưới toán tử bổ sung số nguyên được đánh dấuImmutable.
Để 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 đá 88 của mình với danh mục biến động nghiêm ngặt nhất có giá trị đối với họ.
Bất kỳ chức tỷ lệ kèo bóng đá 88 nào có tác dụng phụphảiđược dán nhãnDisrile, do đó không thể tối ưu hóa các cuộc gọi đến nó xa. Ngay cả một chức tỷ lệ kèo bóng đá 88 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 trong 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 đá 88 đủ điều kiện làỔn định, vì giá trị của chúng không thay đổi
trong một giao dịch.
Có rất ít sự khác biệt giữaỔn địnhvàImmutableCá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 cho dù một chức tỷ lệ kèo bóng đá 88 đượ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 tỷ lệ kèo bóng đá 88bất biếnKhi 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. Cái nà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 chức tỷ lệ kèo bóng đá 88 Ngôn ngữ mà bộ nhớ cache kế hoạch (chẳng hạn nhưPL/PGSQL).
Đối với các chức tỷ lệ kèo bóng đá 88 được viết bằng SQL hoặc trong bất kỳ tiêu chuẩn nào Ngôn ngữ thủ tục, có một tài sản quan trọng thứ hai được xác định theo thể loại biến động, cụ thể là khả tỷ lệ kèo bóng đá 88 hiển thị của bất kỳ Thay đổi dữ liệu đã được thực hiện bởi lệnh SQL đang gọi chức tỷ lệ kèo bóng đá 88. MỘTHàm sẽ thấy Những thay đổi như vậy, Aổn địnhhoặcImmutableHàm sẽ không. Hành vi này là được triển khai bằng cách sử dụng hành vi ảnh chụp nhanh của MVCC (xemChương 13):ổn địnhvàbất biến14525_14611DisrileCác chức tỷ lệ kèo bóng đá 88 có được một ảnh chụp nhanh mới Khi bắt đầu mỗi truy vấn họ thực thi.
Lưu ý:14782_14915
Vì hành vi nhanh chóng này, một chức tỷ lệ kèo bóng đá 88 chứa chỉ mộtChọntỷ lệ kèo bóng đá 88 lệnh có thể được đánh dấu một cách an toànỔn định, ngay cả khi nó chọn từ tỷ lệ kèo bóng đá 88 bảng đó có thể đang được sửa đổi bởi tỷ lệ kèo bóng đá 88 truy vấn đồng thời.PostgreSQLSẽ thực thi tất cả tỷ lệ kèo bóng đá 88 lệnh của AỔn định15302_15438
Hành vi ảnh chụp tương tự được sử dụng choChọnlệnh trongbất biếnchức tỷ lệ kèo bóng đá 88. 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 biếnchức tỷ lệ kèo bóng đá 88, vì tính bất biến sẽ bị hỏng nếu nội dung bảng thay đổi. Tuy nhiên,PostgreSQLkhông thực thi điều đó bạn không làm điều đó.
Một lỗi phổ biến là dán nhãn hàmImmutableKhi kết quả của nó phụ thuộc vào cấu hình tham số. Ví dụ, một chức tỷ lệ kèo bóng đá 88 thao túng dấu thời gian cũng có thể có kết quả phụ thuộc vàotimezoneCài đặt. Vì An toàn, các chức tỷ lệ kèo bóng đá 88 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 rằngổn địnhvàImmutableCác chức tỷ lệ kèo bóng đá 88 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 trở lên thực thi nó bằng cách yêu cầu các chức tỷ lệ kèo bóng đá 88 SQL và ngôn ngữ thủ tục Các chức tỷ lệ kèo bóng đá 88 của các danh mục này không chứa các lệnh SQL ngoàiChọn. (Đây không phải là một Kiểm tra chống đạn, vì các chức tỷ lệ kèo bóng đá 88 như vậy vẫn có thể gọiDisrilyCác chức tỷ lệ kèo bóng đá 88 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 biếnchức tỷ lệ kèo bóng đá 88 không nhận thấy thay đổi cơ sở dữ liệu được áp dụng bởi hàm được gọi, vì chúng là ẩn khỏi ảnh chụp nhanh của nó.)