Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Procesor kwerend nie może utworzyć planu kwerendy z powodu wskazówek zdefiniowanych w tej kwerendzie. Wyślij zapytanie ponownie i bez użycia SET FORCEPLAN

Z tutaj :

Aby zapytanie najbliższego sąsiada używało indeksu przestrzennego, muszą być spełnione następujące wymagania:

  1. Indeks przestrzenny musi być obecny w jednej z kolumn przestrzennych, a metoda STDistance() musi używać tej kolumny w klauzulach WHERE i ORDERBY.
  2. Klauzula TOP nie może zawierać instrukcji PERCENT.
  3. Klauzula WHERE musi zawierać metodę STDistance().
  4. Jeśli w klauzuli WHERE występuje wiele predykatów, predykat zawierający metodę STDistance() musi być połączony z innymi predykatami za pomocą łącznika AND. Metoda STDistance() nie może znajdować się w opcjonalnej części klauzuli WHERE.
  5. Pierwsze wyrażenie w klauzuli ORDER BY musi używać metody STDistance().
  6. Porządek sortowania dla pierwszego wyrażenia STDistance() w klauzuli ORDER BY musi być ASC.
  7. Wszystkie wiersze, dla których STDistance zwraca NULL, muszą zostać odfiltrowane.

To powinno działać:

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

Możesz sprawdzić, czy używa indeksu przestrzennego, nawet WITH INDEX wskazówka została usunięta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sp_MSforeachdb:uwzględniaj tylko wyniki z baz danych z wynikami

  2. Jak dołączyć do pustego stołu

  3. Skopiuj wartość zmiany tabeli z 1 kolumny i wstaw ją do tej samej tabeli

  4. Próba zalogowania się przy użyciu uwierzytelniania SQL nie powiodła się

  5. Nieprawidłowa nazwa kolumny SQL Server po dodaniu nowej kolumny