Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa fungsi SQL Server Scalar-valued menjadi lebih lambat?

Dalam kebanyakan kasus, sebaiknya hindari fungsi bernilai skalar yang mereferensikan tabel karena (seperti yang dikatakan orang lain) pada dasarnya adalah kotak hitam yang perlu dijalankan sekali untuk setiap baris, dan tidak dapat dioptimalkan oleh mesin rencana kueri. Oleh karena itu, mereka cenderung menskalakan secara linier bahkan jika tabel terkait memiliki indeks.

Anda mungkin ingin mempertimbangkan untuk menggunakan fungsi bernilai tabel sebaris, karena fungsi tersebut dievaluasi sebaris dengan kueri, dan dapat dioptimalkan. Anda mendapatkan enkapsulasi yang Anda inginkan, tetapi kinerja menempelkan ekspresi tepat di pernyataan pilih.

Sebagai efek samping dari inline, mereka tidak dapat berisi kode prosedural (tidak mendeklarasikan @variable; set @variable =..; return). Namun, mereka dapat mengembalikan beberapa baris dan kolom.

Anda dapat menulis ulang fungsi Anda seperti ini:

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
);

Sintaks untuk menggunakannya juga sedikit berbeda:

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. Fitur Teratas yang Harus Dicari di Alat Pemantauan SQL Server

  2. Permintaan untuk membuat daftar jumlah catatan di setiap tabel dalam database

  3. Menggunakan INNER JOIN untuk Menggabungkan Tabel SQL Server dan Menampilkannya di ASP.NET Webforms

  4. Cara membuat banyak satu ke satu

  5. Perbaiki SQL Database Recovery Pending Access Masalah Ditolak