sql >> Databasteknik >  >> RDS >> Sqlserver

Frågeprocessor kunde inte skapa en frågeplan på grund av tipsen som definieras i den här frågan. Skicka frågan igen och utan att använda SET FORCEPLAN

Från här :

Följande krav måste uppfyllas för att en Nearest Neighbor-fråga ska kunna använda ett rumsligt index:

  1. Ett rumsligt index måste finnas på en av de rumsliga kolumnerna och metoden STDistance() måste använda den kolumnen i WHERE- och ORDERBY-satserna.
  2. TOP-satsen kan inte innehålla en PERCENT-sats.
  3. WHERE-satsen måste innehålla en STDistance()-metod.
  4. Om det finns flera predikat i WHERE-satsen måste predikatet som innehåller metoden STDistance() kopplas till de andra predikaten med en AND-konjunktion. STDistance()-metoden kan inte finnas i en valfri del av WHERE-satsen.
  5. Det första uttrycket i ORDER BY-satsen måste använda metoden STDistance().
  6. Sorteringsordningen för det första STDistance()-uttrycket i ORDER BY-satsen måste vara ASC.
  7. Alla rader för vilka STDistance returnerar NULL måste filtreras bort.

Så det här borde fungera:

DECLARE @g geography;
declare @point nvarchar(50)  =''
declare @i int =0,
        @lat decimal(8,6) =0.0,
        @long decimal(8,6) =0.0,
        @start datetime = getdate()
set @lat =(select (0.9 -Rand()*1.8)*100)
set @long =(select (0.9 -Rand()*1.8)*100)
set @point = (select 'POINT('+CONVERT(varchar(10), @lat)+ '  ' 
             +CONVERT(varchar(10), @long)+')')
SET @g = geography::STGeomFromText(@point, 4326);

SELECT TOP 1000
    @lat,
    @long,
        @g.STDistance(st.[coord]) AS [DistanceFromPoint (in meters)] 
    ,   st.[coord]
    ,   st.id
FROM    Temp st with(index([SpatialIndex_1]))
WHERE @g.STDistance(st.[coord])  IS NOT NULL
ORDER BY @g.STDistance(st.[coord]) asc

Du kan kontrollera att den använder det rumsliga indexet även WITH INDEX ledtråd tas bort.



  1. Skapa och importera mysql-databas på delad värd i php

  2. Behöver infoga poster i Oracle-tabellen för schemaläggning

  3. Bästa sättet att lagra taggar för hastighet i enorma bord

  4. Hur kan jag skapa ett INSERT-skript för en befintlig SQL Server-tabell som inkluderar alla lagrade rader?