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

Perhitungan Jarak dengan database SQL Server yang besar

Anda bisa melakukan lebih buruk daripada melihat GEOGRAPHY tipe data, misalnya:

CREATE TABLE Places
(
    SeqID       INT IDENTITY(1,1),
    Place       NVARCHAR(20),
    Location    GEOGRAPHY
)
GO
INSERT INTO Places (Place, Location) VALUES ('Coventry', geography::Point(52.4167, -1.55, 4326))
INSERT INTO Places (Place, Location) VALUES ('Sheffield', geography::Point(53.3667, -1.5, 4326))
INSERT INTO Places (Place, Location) VALUES ('Penzance', geography::Point(50.1214, -5.5347, 4326))
INSERT INTO Places (Place, Location) VALUES ('Brentwood', geography::Point(52.6208, 0.3033, 4326))
INSERT INTO Places (Place, Location) VALUES ('Inverness', geography::Point(57.4760, -4.2254, 4326))
GO
SELECT p1.Place, p2.place, p1.location.STDistance(p2.location) / 1000 AS DistanceInKilometres
    FROM Places p1
    CROSS JOIN Places p2
GO  
SELECT p1.Place, p2.place, p1.location.STDistance(p2.location) / 1000 AS DistanceInKilometres
    FROM Places p1
        INNER JOIN Places p2 ON p1.SeqID > p2.SeqID
GO  

geography::Point mengambil garis lintang dan bujur serta SRID (Nomor ID Referensi Khusus). Dalam hal ini, SRID adalah 4326 yang merupakan standar lintang dan bujur. Karena Anda sudah memiliki garis lintang dan garis bujur, Anda cukup ALTER TABLE untuk menambahkan kolom geografi lalu UPDATE untuk mengisinya.

Saya telah menunjukkan dua cara untuk mengeluarkan data dari tabel, namun Anda tidak dapat membuat tampilan yang diindeks dengan ini (tampilan yang diindeks tidak dapat bergabung sendiri). Anda dapat membuat tabel sekunder yang secara efektif merupakan cache, yang diisi berdasarkan hal di atas. Anda kemudian hanya perlu khawatir tentang mempertahankannya (bisa dilakukan melalui pemicu atau proses lainnya).

Perhatikan bahwa gabungan silang akan memberi Anda 250.000,000,000 baris, tetapi pencarian sederhana karena Anda hanya perlu melihat salah satu kolom tempat (yaitu, SELECT * FROM table WHERE Place1 = 'Sheffield' AND distance < 100 , yang kedua akan memberi Anda lebih sedikit baris, tetapi kueri kemudian perlu mempertimbangkan kolom Place1 dan Place2).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah Kinerja dengan SQL Server 2012 Enterprise Edition Di Bawah Lisensi CAL

  2. Pagination yang efisien di SQL Server 2008 R2

  3. Bagaimana cara menyimpan dokumen seperti PDF, Docx, xls di sql server 2008

  4. Ubah nilai kolom INT menjadi string kosong menggunakan ISNULL

  5. Cara Secara Proaktif Mengumpulkan Informasi Fragmentasi Indeks SQL Server