我们的项目将世界数据库保存在MySQL db的INNODB表中的树结构中.地球是根,然后是国家,然后是国家地区,地点是叶子.
外键用于快速访问儿童(例如某个地区的城市).
现在我们想要在给定坐标的数据库中实现快速地理搜索.一个显而易见的解决方案是使用SPATIAL INDEX,它是MyISAM表的一个特性.但MyISAM表不支持外键.INNODB表不支持SPATIAL INDEX.
因此,如果我们使用MyISAM表,我们必须放弃外键,这会让孩子们搜索太长时间.
我们如何在树中结合快速儿童搜索并在表格中包含空间索引?
我们如何将树中的快速子搜索与表中的空间索引结合起来?
id手动创建parentId表的索引:
CREATE INDEX ix_mytable_parentid ON mytable (parentid)
Run Code Online (Sandbox Code Playgroud)
请注意,由于id很可能是 a PRIMARY KEY,因此不需要显式索引it(将隐式创建一个索引)。
BTW,如果您拥有基于地理的自然层次结构,那么使用父子关系进行搜索有何意义?
您可以进行查询以使用索引SPATIAL:
SELECT *
FROM mytable m1
JOIN mytable m2
ON MBRContains (m2.area, m1.area)
AND m2.parentId = m1.id
WHERE m1.name = 'London'
Run Code Online (Sandbox Code Playgroud)
它将使用空间索引进行搜索并使用关系进行精细过滤。
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |