SQLite保存和遍历字符串数组的最佳方法

时间:2015-05-30 05:40:44

标签: sqlite

我有一张看起来像这样的表。

   | id | coords |
   |  0 | [1,0],[4,3],[4,9],[9,3],[1,8]     
   |  1 | [3,6],[3,8],[7,4],[5,2],[2,1]
   .. and more

最多会有大约70k-100k的行,而且CPU不是很强大。

什么是最快和最少cpu密集的SQLite语句我可以用来确定哪个id有任何给定的坐标?没有两个id共享一个坐标。

实施例

SELECT * FROM mytable WHERE coords LIKE '%[[]3,8]%'

我想上面的LIKE语句会非常密集吗?

1 个答案:

答案 0 :(得分:2)

您应该始终尝试拥有一个正确的normalized数据库。

在这种情况下,坐标列表不在first normal form中。 如果将坐标移动到单独的表中,则可以使用简单明了的查询搜索坐标,可以使用索引加速:

CREATE TABLE MyTable (
    ID,
    [...]
);
CREATE TABLE MyCoordinates (
    MyTableID,
    CoordX,
    CoordY
);

SELECT MyTableID FROM MyCoordinates WHERE X = ? AND Y = ?;