2012-06-18 42 views
5

tôi sử dụng không gian Index và khi tôi cố gắng để thực hiện WHERE tuyên bố:Lỗi khi sử dụng không gian Index trong SQL Server

WHERE T.GEOMETRY.STIntersects(O.GEOMETRY) = 1 AND T.GEOMETRY.STTouches(O.GEOMETRY) = 0 

Nó hoạt động tốt, nhưng khi tôi cố gắng thực hiện với OR:

WHERE T.GEOMETRY.STOverlaps(O.GEOMETRY) = 1 OR T.GEOMETRY.STWithin(O.GEOMETRY) = 1 

Tôi nhận được lỗi này:

The query processor could not produce a query plan for a query with a spatial index hint. Reason: Could not find required binary spatial method in a condition. Try removing the index hints or removing SET FORCEPLAN.

Bất kỳ trợ giúp nào, sự cố trong tuyên bố này là gì?

+0

Vì vậy, thông báo lỗi ám chỉ đến gợi ý chỉ mục không gian. Bạn đang cố gắng ép tay của trình tối ưu hóa bằng cách làm một cái gì đó như "từ tbl với (chỉ số (idx_spatial))"? –

+0

Vâng, tôi đang sử dụng "FROM Table WITH (INDEX (spatial_index))". Tôi không hiểu lỗi này, tại sao nó hoạt động với AND nhưng không phải với OR. – Nenad

+2

Tôi không biết, nhưng máy chủ rõ ràng là tức giận vào nỗ lực của bạn để phá vỡ những gì nó sẽ làm bình thường. Ditch gợi ý chỉ mục: chúng thường được dành riêng cho khi bạn thực sự biết những gì bạn đang làm (không nói bạn là một tân binh, nhưng hiếm khi có ai thông minh hơn trình tối ưu hóa). –

Trả lời

1

Giải pháp chung cho các vấn đề với truy vấn OR (thường là hiệu suất) là tách riêng chúng và sử dụng UNION ALL từ đó. Điều này thường sẽ được thực hiện trong một truy vấn phụ, hoặc một biểu thức bảng chung.

Nếu bạn có thể đăng thêm truy vấn của mình và tốt hơn là lược đồ bảng có liên quan, thì tôi có thể cập nhật câu trả lời của mình bằng câu trả lời chi tiết hơn.

Các vấn đề liên quan