Nhiều vấn đề đòi hỏi denormalization và/hoặc các hoạt động tuần tự có thể được xử lý đặc biệt tốt bởi CLR và có thể được sử dụng để cải thiện hiệu suất đáng kể mà không bị mất khả năng sử dụng ở đầu SQL (nhiều). Thay vì dựa hoàn toàn vào các hoạt động dựa trên bộ hoặc lặp lại, bạn có thể sử dụng phương pháp lai, sử dụng giải pháp dựa trên tập cho các đường lớn và chuyển sang mô hình lặp lại cho các vòng lặp chặt chẽ.
Các kiểu được xây dựng trong hierarchyid
và không gian địa lý (tức là geography
) trong SQL Server 2008 là ví dụ hay về vấn đề không chuẩn hóa. Cả hai đều chứa một lượng lớn dữ liệu rất khó chuẩn hóa mà không làm tổn thương hiệu suất - bạn sẽ cần sử dụng đệ quy hoặc con trỏ để thực hiện bất kỳ công việc có ý nghĩa nào với chúng, hoặc sử dụng tổ kích hoạt và/hoặc tác vụ theo lịch duy trì một bảng không chuẩn hóa.
Một vấn đề khác mà tôi đã giải quyết với các loại CLR là nén nội tuyến. Điều này nghe có vẻ giống như một bài tập vô nghĩa hoặc học tập, nhưng khi dữ liệu được chuẩn hóa hoàn toàn của bạn đang đẩy vào terabyte, thì kích thước giảm 80-90% có nghĩa là rất nhiều. SQL có sẵn tính năng nén tích hợp sẵn và SQL 2005 có vardecimal, và đó cũng là những công cụ tốt, nhưng thuật toán "giảm thiểu" miền có thể hiệu quả gấp đôi về tốc độ nén và CPU. Rõ ràng điều này không áp dụng cho mọi vấn đề, nhưng nó áp dụng cho một số vấn đề.
Tuy nhiên, một vấn đề rất phổ biến khác thường thấy trên trang web này là tạo ra một chuỗi trên bay - ví dụ một chuỗi các ngày liên tiếp.Các giải pháp phổ biến là CTE đệ quy, các bảng tuần tự tĩnh và các bảng spt_values
ít được biết đến, nhưng một UDF CLR đơn giản hoạt động tốt hơn bất kỳ bảng nào và mang lại sự linh hoạt hơn nhiều.
Cuối cùng trong danh sách của tôi: Tập hợp luồng trực tuyến do người dùng xác định cũng rất hữu ích, đặc biệt cho bất kỳ điều gì có liên quan đến thống kê. Có một số điều bạn chỉ đơn giản là không thể soạn thảo trong tổng hợp SQL dựng sẵn, chẳng hạn như trung bình, trung bình di chuyển trọng số, vv UDA cũng có thể lấy nhiều đối số để bạn có thể tham số hóa chúng; về mặt kỹ thuật, tổng hợp không được đảm bảo nhận dữ liệu theo bất kỳ thứ tự cụ thể nào trong phiên bản SQL Server hiện tại, nhưng bạn có thể vượt qua giới hạn đó bằng cách cho nó một đối số bổ sung và sử dụng nó để thực hiện bất kỳ chức năng cửa sổ nào (có tổng hợp nhổ ra một UDT mà sau đó có thể được chuyển thành một bảng).
Nó thực sự rất bực bội như thế nào vài ví dụ có các ứng dụng SQL-CLR thực sự hữu ích; tìm kiếm trên Google và bạn sẽ nhận được 10 triệu kết quả, mỗi kết quả duy nhất trong số đó cho một số chuỗi liên kết ngớ ngẩn hoặc regex. Những điều này rất hữu ích, nhưng hãy dành vài phút để tìm hiểu về các URI SQL và UDA nói riêng và bạn sẽ bắt đầu thấy rất nhiều cách sử dụng cho chúng trong các ứng dụng của riêng bạn. Dĩ nhiên, đừng đi hạt - hãy suy nghĩ cẩn thận về việc có hay không có một giải pháp tốt hơn trong SQL thuần túy - nhưng cũng không giảm giá chúng.
Đây là một trong những bài viết thông tin nhất mà tôi từng đọc. Cảm ơn bạn. –
+1 rất độc đáo đặt –