Tôi muốn ghi nhớ các kết quả chức năng cho hiệu suất, nghĩa là lưu trữ một bộ nhớ cache được lập chỉ mục trên các đối số hàm. Lần đầu tiên tôi gọi một hàm, bộ nhớ cache sẽ không có bất cứ điều gì cho các đối số đầu vào, vì vậy nó sẽ tính toán nó và lưu trữ nó trước khi trả về nó. Các cuộc gọi tiếp theo chỉ sử dụng bộ nhớ cache.Kết quả chức năng lưu trong bộ nhớ cache trong SQL Server 2000
Tuy nhiên, có vẻ như SQL Server 2000 có quy tắc tùy ý ngu ngốc về các hàm là "xác định". Các lệnh INSERT, UPDATE và các thủ tục lưu trữ thông thường đều bị cấm. Tuy nhiên, các thủ tục được lưu trữ mở rộng được cho phép. Làm thế nào là xác định này? Nếu phiên khác sửa đổi trạng thái cơ sở dữ liệu, đầu ra của hàm sẽ thay đổi anyways.
Tôi đang bị điên. Tôi đã nghĩ rằng tôi có thể làm cho bộ nhớ đệm trong suốt cho người dùng. Điều này có thể không? Tôi không có quyền để triển khai các thủ tục được lưu trữ mở rộng.
EDIT:
Giới hạn này vẫn còn trong năm 2008. Bạn không thể gọi RAND, vì Chúa ơi!
Bộ nhớ cache sẽ do tôi triển khai trong DB. Cache là bất kỳ lưu trữ dữ liệu sử dụng cho bộ nhớ đệm ...
EDIT:
Không có trường hợp các đối số tương tự với một chức năng sẽ mang lại kết quả khác nhau, bên ngoài thay đổi đối với dữ liệu cơ bản. Đây là một nền tảng BI, và những thay đổi duy nhất đến từ ETL được lên lịch, lúc đó tôi sẽ TRUNCATE bảng cache.
Đây là các tính toán chuỗi thời gian chuyên sâu I/O, theo thứ tự của O (n^4). Tôi không có nhiệm vụ thay đổi bảng hoặc chỉ mục cơ bản. Ngoài ra, rất nhiều chức năng này sử dụng cùng chức năng trung gian và bộ nhớ đệm cho phép các chức năng đó được sử dụng.
UDF không thực sự xác định, trừ khi chúng giải thích các thay đổi trong trạng thái cơ sở dữ liệu. Vấn đề ở đây là gì? Bộ đệm ẩn của SQL Server? (Ironic.) Nếu SQL Server là bộ đệm ẩn, thì nó phải hết hạn khi thay đổi các bảng được ràng buộc lược đồ. Nếu chúng bị ràng buộc lược đồ, thì tại sao không ràng buộc các bảng mà hàm sửa đổi? Tôi có thể thấy lý do tại sao procs không được phép, mặc dù đó chỉ là cẩu thả; chỉ cần lược đồ liên kết procs. Và, BTW, tại sao cho phép procs được lưu trữ mở rộng? Bạn không thể theo dõi những gì những người làm để đảm bảo quyết định !!! Argh !!!
EDIT:
Câu hỏi của tôi là: Có cách nào để uể oải kết quả chức năng bộ nhớ cache trong một cách mà có thể được sử dụng trong một cái nhìn?
Xin lỗi, không rõ ràng với tôi từ bài đăng gốc mà bạn đã tạo bộ nhớ cache "từ đầu". Làm thế nào bạn có ý định đối phó với các trường hợp có cùng chức năng, với cùng các đối số, nên trả về các kết quả khác nhau? –
câu hỏi của bạn là gì? –