Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bộ xử lý truy vấn không thể tạo kế hoạch truy vấn do các gợi ý được xác định trong truy vấn này. Gửi lại truy vấn và không sử dụng SET FORCEPLAN

Từ tại đây :

Các yêu cầu sau phải được đáp ứng để truy vấn Nearest Neighbor sử dụng chỉ mục không gian:

  1. Chỉ mục không gian phải có trên một trong các cột không gian và phương thức STDistance () phải sử dụng cột đó trong mệnh đề WHERE và ORDERBY.
  2. Mệnh đề TOP không được chứa câu lệnh PERCENT.
  3. Mệnh đề WHERE phải chứa phương thức STDistance ().
  4. Nếu có nhiều vị từ trong mệnh đề WHERE thì thepredicate chứa phương thức STDistance () phải được kết nối bằng một liên kết AND với các vị từ khác. Phương thức STDistance () không thể nằm trong một phần tùy chọn của mệnh đề WHERE.
  5. Biểu thức đầu tiên trong mệnh đề ORDER BY phải sử dụng phương thứcSTDistance ().
  6. Thứ tự sắp xếp cho biểu thức STDistance () đầu tiên trong Điều khoản ĐẶT HÀNG phải là ASC.
  7. Tất cả các hàng mà STDistance trả về NULL phải được lọc ra.

Vì vậy, điều này sẽ hoạt động:

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

Bạn có thể kiểm tra xem nó có đang sử dụng chỉ mục khoảng cách ngay cả WITH INDEX không gợi ý bị xóa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất danh sách được phân tách bằng dấu phẩy trong T-SQL

  2. Hợp nhất hai phân vùng thành một trong SQL Server (T-SQL)

  3. Khóa chính bắt buộc cho máy chủ Sql

  4. Kiểm tra tình trạng máy chủ SQL chủ động, Phần 5:Chờ thống kê

  5. Có cách nào để đơn giản hóa so sánh NULL của 2 giá trị không