Saya memiliki sekitar 75 juta catatan dalam database SQL Server 2008 R2 Express. Masing-masing panjang lat terkait dengan beberapa nilai. Tabel memiliki kolom geografi. Saya mencoba menemukan tetangga terdekat untuk garis bujur lintang (titik) tertentu. Saya sudah memiliki kueri dengan indeks spasial di tempat. Tetapi tergantung pada di mana catatan berada dalam database, katakanlah kuartal pertama atau kuartal terakhir, kueri dapat memakan waktu sekitar 3 hingga 30 detik untuk menemukan tetangga terdekat. Saya merasa ini dapat dioptimalkan untuk memberikan hasil yang jauh lebih cepat dengan mengoptimalkan kueri atau indeks spasial. Sekarang menerapkan beberapa indeks spasial dengan pengaturan default. Berikut ini tabel dan kueri saya.
CREATE TABLE lidar(
[id] [bigint] IDENTITY(1,1) NOT NULL,
[POINTID] [int] NOT NULL,
[GRID_CODE] [numeric](17, 8) NULL,
[geom] [geography] NULL,
CONSTRAINT [PK_lidar_1] PRIMARY KEY CLUSTERED ([id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Indeks spasial yang saya gunakan:
CREATE SPATIAL INDEX [SPATIAL_lidar] ON [dbo].[lidar] ([geom]) USING GEOGRAPHY_GRID
WITH (
GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Inilah Query yang saya gunakan:
declare @ms_at geography = 'POINT (-95.66 30.04)';
select TOP(1) nearPoints.geom.STAsText()as latlon
from
(
select r.geom
from lidar r With(Index(SPATIAL_lidar))
where r.geom.STIntersects(@ms_at.STBuffer(1000)) = 1
) nearPoints
Berikut ini adalah contoh lat long dalam database saya. untuk memberikan gagasan tentang akurasi dan kepadatan. Semua 70 juta catatan adalah untuk satu kota (data Lidar).
POINT (-95.669434934023087 30.049513838913736)
Sekarang kueri ini memberi saya hasil seperti yang saya jelaskan di atas, tetapi saya ingin meningkatkan kinerja sebanyak mungkin. Dugaan saya adalah dengan mengubah nilai default indeks spasial saya mungkin di atas untuk mengoptimalkan kinerja dengan lebih baik. Ada petunjuk tentang ini?
Saya mencoba memvariasikan buffer dari 10 hingga 1000 tetapi dengan hasil yang hampir sama.
Juga ada saran lain untuk meningkatkan kinerja.
Inilah sistem yang saya gunakan saat ini:
Windows 7 64bit Professional
Intel(R) Core(TM)2 Quad CPU Q9650 @ 3.00GHz (4 CPUs), ~3.0GHz
Ram: 8 GB
NVIDIA GeForce 9500 GT
lidar
tag.