如何在MySQL表中使用外键和空间索引?

我们的项目将MySQL数据库的INNODB表中的世界数据库保存为树形结构。 地球是根,然后是国家,然后是国家地区和地点是叶子。

外键用于快速访问儿童(例如,某个地区的城市)。

现在我们想要在给定坐标的数据库中实现快速地理搜索。 一个明显的解决方案是使用SPATIAL INDEX,这是MyISAM表的一个特性。 但MyISAM表不支持外键。 而INNODB表格不支持SPATIAL INDEX。

所以如果我们使用MyISAM表,我们必须放弃外键,这会让孩子搜索的方式太长。

我们如何将树中的快速儿童搜索结合起来,并且在表中还有SPATIAL INDEX?


我们如何将树中的快速儿童搜索结合起来,并且在表中还有SPATIAL INDEX?

手动在表格的idparentId上创建索引:

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?

下一篇: Drag elements around with gravity effect