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

Pav*_*vel 7 mysql sql

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

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

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

因此,如果我们使用MyISAM表,我们必须放弃外键,这会让孩子们搜索太长时间.

我们如何在树中结合快速儿童搜索并在表格中包含空间索引?

Qua*_*noi 4

我们如何将树中的快速子搜索与表中的空间索引结合起来?

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)

它将使用空间索引进行搜索并使用关系进行精细过滤。