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

Tại sao các hàm có giá trị vô hướng của SQL Server hoạt động chậm hơn?

Trong hầu hết các trường hợp, tốt nhất nên tránh các hàm có giá trị vô hướng tham chiếu bảng vì (như những người khác đã nói) về cơ bản chúng là hộp đen cần được chạy một lần cho mỗi hàng và không thể được tối ưu hóa bởi công cụ kế hoạch truy vấn. Do đó, chúng có xu hướng chia tỷ lệ tuyến tính ngay cả khi các bảng được liên kết có chỉ mục.

Bạn có thể muốn xem xét sử dụng một hàm giá trị bảng nội tuyến, vì chúng được đánh giá nội tuyến với truy vấn và có thể được tối ưu hóa. Bạn nhận được gói mà bạn muốn, nhưng hiệu suất của việc dán các biểu thức ngay trong câu lệnh select.

Như một tác dụng phụ của việc được nội tuyến, chúng không thể chứa bất kỳ mã thủ tục nào (không khai báo @variable; set @variable =..; return). Tuy nhiên, chúng có thể trả về một số hàng và cột.

Bạn có thể viết lại các hàm của mình như sau:

create function usf_GIS_GET_LAT(
    @City varchar (30),
    @State char (2)
)
returns table
as return (
  select top 1 lat
  from GIS_Location with (nolock) 
  where [State] = @State
    and [City] = @City
);

GO

create function usf_GIS_GET_LON (
    @City varchar (30),
    @State char (2)
)
returns table
as return (
  select top 1 LON
  from GIS_Location with (nolock)
  where [State] = @State
    and [City] = @City
);

Cú pháp để sử dụng chúng cũng hơi khác một chút:

select
    Lat.Lat,
    Lon.Lon
from
    Address_Location with (nolock)
    cross apply dbo.usf_GIS_GET_LAT(City,[State]) AS Lat
    cross apply dbo.usf_GIS_GET_LON(City,[State]) AS Lon
WHERE
    ID IN (SELECT TOP 100 ID FROM Address_Location WITH(NOLOCK) ORDER BY ID DESC)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều gì xảy ra nếu bạn không thực hiện một giao dịch với cơ sở dữ liệu (chẳng hạn như SQL Server)?

  2. Kết nối với Cơ sở dữ liệu MSSQL bằng Flask-SQLAlchemy

  3. Tạo bảng (cấu trúc) từ bảng hiện có

  4. Cơ sở dữ liệu hệ thống SQL Server - Khái niệm cơ bản

  5. Tweet vui nhộn về cuộc đời của một DBA