我有一個表點有一列的點類型GEOGRAPHY。我運行這段代碼獲得的最近點:選擇最近的點sql server空間
DECLARE @Wgs84Longitude FLOAT;
DECLARE @Wgs84Latitude FLOAT;
DECLARE @Point GEOGRAPHY = Geography::STPointFromText(N'POINT('
+ CAST(@Wgs84Longitude AS NVARCHAR(MAX))
+ N' '
+ CAST(@Wgs84Latitude AS NVARCHAR(MAX))
+ N')', 4326);
SELECT
TOP 1
*
FROM Points
ORDER BY @Point.STDistance(Point) ASC;
積分表有這個索引:
CREATE SPATIAL INDEX SpatialIndex ON Points (Point);
不幸的是,查詢是相當緩慢。有什麼我可以改進,使其更快(索引和/或查詢明智)?
PS:
我也打了這方面的一些口味:
CREATE SPATIAL INDEX SpatialIndex ON [Core].[InternationalPostcodeList](Point)
USING GEOGRAPHY_GRID
WITH
(
--BOUNDING_BOX =(-8.164229, 49.18581, 8.05384, 60.717093)
GRIDS=(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH)
, CELLS_PER_OBJECT = 64
, PAD_INDEX = OFF
, SORT_IN_TEMPDB = OFF
, DROP_EXISTING = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY];
的表現依然不能接受的。
謝謝。當我按照文章中的建議介紹WHERE子句時,爲了顯然強制使用空間索引,查詢執行速度更慢。 – cs0815
@csetzkorn表格的大小(以行爲單位)和你現在得到的次數是多少? –
約250萬行... – cs0815