Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Kueri umum yang digunakan dengan data spasial adalah kueri tetangga terdekat. Kueri tetangga terdekat digunakan untuk menemukan objek spasial terdekat dengan objek spasial tertentu. Misalnya, pencari toko untuk situs web sering kali harus menemukan lokasi toko terdekat ke lokasi pelanggan.
Kueri tetangga terdekat dapat ditulis dalam berbagai format kueri yang valid, tetapi agar kueri tetangga terdekat menggunakan indeks spasial, sintaks berikut harus digunakan.
Syntax
SELECT TOP ( number )
[ WITH TIES ]
[ * | expression ]
[, ...]
FROM spatial_table_reference, ...
[ WITH
(
[ INDEX ( index_ref ) ]
[ , SPATIAL_WINDOW_MAX_CELLS = <value>]
[ ,... ]
)
]
WHERE
column_ref.STDistance ( @spatial_ object )
{
[ IS NOT NULL ] | [ < const ] | [ > const ]
| [ <= const ] | [ >= const ] | [ <> const ] ]
}
[ AND { other_predicate } ]
}
ORDER BY column_ref.STDistance ( @spatial_ object ) [ ,...n ]
[ ; ]
Kueri tetangga terdekat dan indeks spasial
Di SQL Server, klausa TOP dan ORDER BY digunakan untuk melakukan pencarian kueri tetangga terdekat pada kolom data spasial. Klausa ORDER BY berisi panggilan ke STDistance() metode untuk jenis data kolom spasial. Klausa TOP menunjukkan jumlah objek yang akan dikembalikan untuk kueri.
Persyaratan berikut harus dipenuhi untuk kueri tetangga terdekat untuk menggunakan indeks spasial:
Indeks spasial harus ada di salah satu kolom spasial dan metode tersebut harus menggunakan kolom tersebut dalam klausa
STDistance()danWHERE.Klausa
TOPtidak boleh berisiPERCENTpernyataan.Klausa
WHEREharus berisiSTDistance()metode .Jika ada beberapa predikat dalam klausul
WHERE, maka predikat yang berisi metodeSTDistance()harus dihubungkan dengan predikat lain menggunakan konjungsiAND. MetodeSTDistance()tidak dapat berada di bagian opsional dariWHEREklausul.Ekspresi pertama dalam
ORDER BYklausa harus menggunakanSTDistance()metode .Urutan pengurutan untuk ekspresi pertama
STDistance()dalamORDER BYklausul harusASC.Semua baris yang
STDistancepengembaliannyaNULLharus disaring.
Warning
Metode yang mengambil jenis data geografi atau geometri sebagai argumen akan kembali NULL jika SRID tidak sama untuk jenisnya.
Disarankan agar tesselasi indeks spasial baru digunakan untuk pencarian tetangga terdekat. Untuk informasi selengkapnya tentang pengubinan indeks spasial, lihat Data Spasial.
Contoh 1
Contoh kode berikut menunjukkan kueri tetangga terdekat yang dapat menggunakan indeks spasial. Contoh menggunakan tabel Person.Address dalam basis data sampel AdventureWorks2025.
USE AdventureWorks2022
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
WHERE SpatialLocation.STDistance(@g) IS NOT NULL
ORDER BY SpatialLocation.STDistance(@g);
Buat indeks spasial pada kolom SpatialLocation untuk melihat bagaimana kueri tetangga terdekat menggunakan indeks spasial. Untuk informasi selengkapnya tentang membuat indeks spasial, lihat Membuat, Memodifikasi, dan Menghilangkan Indeks Spasial.
Contoh 2
Contoh kode berikut menunjukkan kueri tetangga terdekat yang tidak dapat menggunakan indeks spasial.
USE AdventureWorks2022
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
ORDER BY SpatialLocation.STDistance(@g);
Kueri tidak memiliki klausa WHERE yang menggunakan STDistance() dalam bentuk yang ditentukan di bagian sintaks, sehingga kueri tidak dapat menggunakan indeks spasial.