从联合军队中找到二维物体的最快方法

时间:2014-05-12 20:59:47

标签: mysql sql

我有一个带有2d对象x和z的表(有一个,但为此没关系),当我提供一套合作时,我试图找到最简单的方法来查找它们

SELECT * FROM RegionName 
WHERE (( "50" between RegionName.X1 and RegionName.X2 )  
AND ( "-66" between RegionName.Z1 and RegionName.Z2 ))    
OR (( "50" between RegionName.X2 and RegionName.X1 )     
AND ( "-66" between RegionName.Z1 and RegionName.Z2 ))    
OR (( "50" between RegionName.X2 and RegionName.X1 )     
AND ( "-66" between RegionName.Z2 and RegionName.Z1 ))    
OR (( "50" between RegionName.X1 and RegionName.X2 )     
AND ( "-66" between RegionName.Z2 and RegionName.Z1 ))

现在我有一些有用的东西,但我知道应该有一个更好的方法来做到这一点。我试过没有x和z的所有组合,但它并不总是有效,这就是我最终得到的结果。任何人都知道如何将其减少到2或3行。我试过(下面),但它似乎没有用。

SELECT * FROM RegionName 
WHERE ( "50" (between RegionName.X1 and RegionName.X2, between RegionName.X2 and RegionName.X1 ))
AND ( "-66" (between RegionName.Z1 and RegionName.Z2, between RegionName.Z2 and RegionName.Z1))

或者我只是想为自己做更多的工作?

1 个答案:

答案 0 :(得分:1)

使用空间索引,也称为R-Tree。您可以使用SQL询问point(50,-66)是否在任何区域内。有关如何使用空间索引以及可用于查询它们的函数,请参阅此http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html