2010-02-02 95 views
7

我們的項目將MySQL數據庫的INNODB表內的世界數據庫保存在樹狀結構中。 地球是根,那麼國家,那麼國家地區和地點是葉子。如何在MySQL表中使用外鍵和空間索引?

外鍵用於提供對兒童(例如,某個地區的城市)的快速訪問。

現在我們要在給定座標的數據庫中實現快速地理搜索。 一個明顯的解決方案是使用SPATIAL INDEX,這是MyISAM表的一個特性。 但MyISAM表不支持外鍵。而INNODB表格不支持SPATIAL INDEX。

所以,如果我們使用MyISAM表,我們必須放棄外鍵,這會讓孩子搜索的方式太長。

我們如何將快速兒童搜索結合到樹中,並且在表中還有SPATIAL INDEX?

+0

請注意,外鍵的目的不是加速查詢,而是強制執行表之間的關係。加速查找的是與外鍵一起創建的索引。 – Benjamin 2012-10-25 01:27:59

回答

4

我們如何結合樹中的快速兒童搜索和表中的空間索引?

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' 

將用於搜索空間索引和精細過濾的關係。