ฉันมีระเบียนประมาณ 75 ล้านระเบียนในฐานข้อมูล SQL Server 2008 R2 Express แต่ละรายการมีความยาว lat ที่สอดคล้องกับค่าบางค่า ตารางมีคอลัมน์ภูมิศาสตร์ ฉันกำลังพยายามหาเพื่อนบ้านที่ใกล้ที่สุดหนึ่งแห่งสำหรับละติจูดลองจิจูดที่ระบุ (จุด) ฉันมีข้อความค้นหาที่มีดัชนีเชิงพื้นที่อยู่แล้ว แต่ขึ้นอยู่กับตำแหน่งที่บันทึกในฐานข้อมูลพูดในไตรมาสแรกหรือไตรมาสที่แล้วแบบสอบถามอาจใช้เวลาประมาณ 3 ถึง 30 วินาทีในการค้นหาเพื่อนบ้านที่ใกล้ที่สุด ฉันรู้สึกว่าสิ่งนี้สามารถปรับให้เหมาะสมเพื่อให้ได้ผลลัพธ์ที่รวดเร็วยิ่งขึ้นด้วยการปรับการสืบค้นหรือดัชนีเชิงพื้นที่ ตอนนี้ใช้ดัชนีอวกาศด้วยการตั้งค่าเริ่มต้น นี่คือลักษณะตารางและข้อความค้นหาของฉัน
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]
ดัชนีเชิงพื้นที่ที่ฉันใช้:
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]
นี่คือคำค้นหาที่ฉันใช้:
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
นี่คือตัวอย่างของ lat longs ในฐานข้อมูลของฉัน เพื่อให้ทราบถึงความแม่นยำและความหนาแน่น ทั้งหมด 70 ล้านระเบียนมีไว้สำหรับหนึ่งเมือง (ข้อมูล Lidar)
POINT (-95.669434934023087 30.049513838913736)
ตอนนี้แบบสอบถามนี้ให้ผลลัพธ์ตามที่อธิบายไว้ข้างต้น แต่ฉันต้องการปรับปรุงประสิทธิภาพให้มากที่สุด การเดาของฉันคือการปรับแต่งค่าเริ่มต้นของดัชนีเชิงพื้นที่ที่ฉันอาจสูงกว่าเพื่อเพิ่มประสิทธิภาพให้ดีขึ้น เบาะแสใด ๆ เกี่ยวกับเรื่องนี้?
ฉันพยายามเปลี่ยนบัฟเฟอร์จาก 10 เป็น 1,000 แต่ให้ผลลัพธ์เกือบเหมือนกัน
นอกจากนี้ยังมีข้อเสนอแนะอื่น ๆ เพื่อปรับปรุงประสิทธิภาพอีกด้วย
นี่คือระบบที่ฉันใช้อยู่ตอนนี้:
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
แท็ก