我正在查询一个带有LINESTRING地理列的表。我的查询基本上是这样的:
SELECT id FROM mytable
WHERE geography::STPolyFromText('POLYGON((...coords for poly A...)),4326).STIntersects(geo) = 1
OR geography::STPolyFromText('POLYGON((...coords for poly B...)),4326).STIntersects(geo) = 1
此查询会产生81条记录,需要16秒。
如果我把它分成两个单独的查询:
SELECT id FROM mytable
WHERE geography::STPolyFromText('POLYGON((...coords for poly A...)),4326).STIntersects(geo) = 1
SELECT id FROM mytable
WHERE geography::STPolyFromText('POLYGON((...coords for poly B...)),4326).STIntersects(geo) = 1
他们分别返回51和31条记录(共1条),几乎没有时间执行。
为什么OR如此缓慢?我是否必须使用多个查询和后期处理来实现一些基本的东西,或者我是否遗漏了一些明显的东西?