如何在MySQL表中使用外键和空间索引?
我们的项目将MySQL数据库的INNODB表中的世界数据库保存为树形结构。 地球是根,然后是国家,然后是国家地区和地点是叶子。
外键用于快速访问儿童(例如,某个地区的城市)。
现在我们想要在给定坐标的数据库中实现快速地理搜索。 一个明显的解决方案是使用SPATIAL INDEX,这是MyISAM表的一个特性。 但MyISAM表不支持外键。 而INNODB表格不支持SPATIAL INDEX。
所以如果我们使用MyISAM表,我们必须放弃外键,这会让孩子搜索的方式太长。
我们如何将树中的快速儿童搜索结合起来,并且在表中还有SPATIAL INDEX?
我们如何将树中的快速儿童搜索结合起来,并且在表中还有SPATIAL INDEX?
手动在表格的id
和parentId
上创建索引:
CREATE INDEX ix_mytable_parentid ON mytable (parentid)
请注意,由于id
是最有可能一个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'
它将使用空间索引进行搜索,并使用精细滤波的关系。
链接地址: http://www.djcxy.com/p/44577.html上一篇: How to use foreign keys and a spatial index inside a MySQL table?