sql >> データベース >  >> RDS >> Sqlserver

このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。 SET FORCEPLANを使用せずに、クエリを再送信します

    こちら から :

    空間インデックスを使用するには、最近傍クエリで次の要件を満たす必要があります。

    1. 空間インデックスは空間列の1つに存在する必要があり、STDistance()メソッドはWHERE句とORDERBY句でその列を使用する必要があります。
    2. TOP句にPERCENTステートメントを含めることはできません。
    3. WHERE句にはSTDistance()メソッドが含まれている必要があります。
    4. WHERE句に複数の述語がある場合、STDistance()メソッドを含む述語は、AND結合によって他の述語に接続する必要があります。 STDistance()メソッドをWHERE句のオプション部分に含めることはできません。
    5. ORDER BY句の最初の式では、STDistance()メソッドを使用する必要があります。
    6. ORDER BY句の最初のSTDistance()式の並べ替え順序はASCである必要があります。
    7. STDistanceがNULLを返すすべての行は、除外する必要があります。

    したがって、これは機能するはずです:

    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
    

    WITH INDEXでも、空間インデックスを使用していることを確認できます。 ヒントが削除されます。



    1. 複数のTIMESTAMP列を持つ1つのMysqlテーブル

    2. データが行間で分割されているExcelでVBAを使用してテーブルをフラット化するにはどうすればよいですか?

    3. SQLでのトリッキーなグループ化された順序

    4. 結果セットのフェッチ中のOracleJDBCメモリ割り当て