我正在研究需要運行SQL查詢以查看某些位置是否屬於由多邊形定義的轄區的應用程序。這些司法管轄區每季度更新一次,這意味着我也需要根據我檢查的日期來檢查它們。我使用mySQL函數MBRContains
來幫助縮小我正在查看的轄區的範圍,使我的應用程序更容易檢查給定的點是否落入其中的任何一個。現在,我的疑問是這樣的:通過更改評估順序來減少SQL查詢的執行時間
SELECT DISTINCT t0.id FROM jurisdiction t0
WHERE t0.beginDate <= '2017-08-05' AND t0.endDate >= '2017-08-05'
AND MBRContains(t0.geometry,GeomFromText("POINT(48.0 -120.0)"));
我相當肯定MBRContains是一個更昂貴的操作比檢查日期,但我還沒有與SQL多少工作,我不能確定如何使因此,管轄權將首先按日期過濾,然後針對MBRContains進行檢查。我怎樣才能做到這一點?在使用此查詢獲得相同結果時,我可以做其他優化嗎?
不確定它是否是一個錯字,但這些都是不好的日期。對於一個日期字段應該是'DATE'數據類型;換另一種方法,即使你堅持使用字符串值,字符串也需要進行格式化,使得這些比較實際上是有意義的('06-08-2001'的結束日期'05-08-2017'之後,類似地'04 -08-2020'的開始日期'05-08-2017'之前) – Uueerdo
@Uererdo日期和點是例子。我已經檢查過它傳遞的是正確的日期,並且正確地過濾了結果,只是查詢時間過長。 – user3726962
如果您在beginDate,endDate和geometry上使用索引,它將加速您的訪問。 – hackela