【问题标题】:How to use foreign keys and a spatial index inside a MySQL table?如何在 MySQL 表中使用外键和空间索引?
【发布时间】:2010-02-02 20:48:40
【问题描述】:

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

外键用于提供对儿童的快速访问(例如区域中的城市)。

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

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

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

【问题讨论】:

  • 请注意,外键的目的不是为了加快查询速度,而是为了加强表之间的关系。加快查找速度的是您将与外键一起创建的索引。

标签: sql mysql


【解决方案1】:

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

手动在表的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'

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2010-11-01
    • 2011-03-29
    • 2018-10-02
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多