Thông thường, lựa chọn kết quả của một hàm vô hướng sẽ không ảnh hưởng nhiều, nhưng lọc bởi nó có thể dễ dàng tốn hàng trăm giây (mặc dù không nhất thiết).
Nếu bạn cần lọc theo kết quả hàm vô hướng (WHERE col = dbo.scalar_function()
), thay vào đó, nó thường giúp tạo ra một hàm có giá trị bảng nội tuyến. Nó sẽ trả về giá trị của nó dưới dạng hàng duy nhất của bảng kết quả. Sau đó, bạn sẽ thực hiện inner join
với kết quả của hàm, lọc hiệu quả theo giá trị trả về. Điều này hoạt động vì SQL Server luôn có thể giải nén các hàm có giá trị trong bảng và nội tuyến chúng vào truy vấn gọi.
Lưu ý rằng thủ thuật này sẽ không hoạt động nếu hàm là một trong nhiều bước. Chúng không thể bị ràng buộc.