Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chức năng có giá trị bảng giết chết hiệu suất truy vấn của tôi

Trả về một Biến bảng sẽ làm cho nó trở thành hàm có giá trị trong bảng nhiều câu lệnh và có thể không tốt cho hiệu suất do thực tế là nó được xử lý như một bảng ngoại trừ không có số liệu thống kê nào có sẵn cho SQL Server để làm cơ sở cho một kế hoạch thực thi tốt - vì vậy nó sẽ ước tính hàm trả về một số lượng rất nhỏ hàng. Nếu nó trả về một số lượng hàng lớn hơn, thì do đó kế hoạch được tạo có thể ít hơn rất nhiều so với tối ưu.

Trong khi đó, chỉ trả về một SELECT làm cho nó trở thành một hàm có giá trị trong bảng nội tuyến - hãy nghĩ về nó nhiều hơn như một góc nhìn. Trong trường hợp này, các bảng cơ bản thực tế được đưa vào truy vấn chính và một kế hoạch thực thi tốt hơn có thể được tạo dựa trên số liệu thống kê thích hợp. Bạn sẽ nhận thấy rằng trong trường hợp này, kế hoạch thực thi sẽ KHÔNG đề cập đến hàm vì về cơ bản nó chỉ được hợp nhất hàm vào truy vấn chính.

Có một tài liệu tham khảo tuyệt vời về nó trên MSDN bởi CSS SQL Server Engineers bao gồm (trích dẫn):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi Kết quả chọn thành Chèn tập lệnh - SQL Server

  2. Tạo tài khoản thư cơ sở dữ liệu trong SQL Server (T-SQL)

  3. Nhật ký giao dịch SQL Server, Phần 1:Khái niệm cơ bản về ghi nhật ký

  4. Chọn / Chèn phiên bản Nâng cấp:có mẫu thiết kế cho tính đồng thời cao không?

  5. bất kỳ giới hạn nào về số lượng kết nối SQL Server?