Mysql

InnoDB 表上的空間索引

  • June 22, 2018

我有一個在 InnoDB 中的數據庫,因為我想要一致性(級聯刪除)。

現在,我想使用空間索引來選擇按幾何距離排序的行。

但是,空間索引需要 MyISAM。最好的事情是什麼?

我能想到的最好的辦法是將位置放在單獨的 MyISAM 表中,然後將 InnoDB 表與它連接起來?(請注意,我已經從語句中刪除了空間魔法以簡化事情。)

select * from inno join isam using (id) order by isam.distance

其他解決方案?

是的,這是我認為最好的。您將受益於 InnoDB(參照完整性)和 MyISAM(空間索引)。

唯一的技術難題是確保 MyISAM 表與 InnoDB 表同步。這可以通過觸發器或儲存過程來完成(因此 InnoDB 表上的每個操作都是通過一個過程完成的。)

另一個“好處”是由於座標值在兩個表中重複,您可以跳過備份 MyISAM 表(或單獨備份)並在數據庫還原後有一個重新創建它的過程。您可能需要一個過程來定期檢查這兩個表是否也同步。

為了加快需要空間索引的查詢(如果表不是很大),您可以確保將索引提前載入到記憶體中,即使在單獨的記憶體中也是如此。查看LOAD INDEX INTO CACHE語法多鍵記憶體

MySQL 5.7+

MySQL 5.7 中,InnoDB 獲得了空間索引,來自MySQL 5.7 中的新增功能

InnoDB 現在支持 MySQL 支持的空間數據類型。在此版本之前,InnoDB 會將空間數據儲存為二進制BLOB數據。BLOB仍然是底層數據類型,但空間數據類型現在映射到新的 InnoDB 內部數據類型,DATA_GEOMETRY.

我相信這是帶來 Boost 的重寫/重構的一部分

也可以看看,

引用自:https://dba.stackexchange.com/questions/49307