过滤文本列:全文或单独的表

时间:2014-05-03 05:46:22

标签: mysql sql

我有一个像这样的表,它有100万+行:

+----+----------+----------------+------------+
| ID |   SSID   |      MAC       |  LOCATION  |  
+----+----------+----------------+------------+
|  1 | home_net | aa:bb:cc:dd:ee | Town North |  
|  2 | fly-fi   | aa:bb:cc:dd:ff | Town South |  
+----+----------+----------------+------------+

我经常需要搜索具有给定位置的所有行。我有三个想法来构建数据,以便我可以根据位置进行过滤而不使用慢速" LIKE":

  1. 将全文索引添加到位置列。
  2. 为location创建一个新表,并在上表中有一个外键。然后我可以根据外键过滤。
  3. 从第2点创建表,并创建一个连接表,如下所示:
  4. +-------------+-----------+
    | LOCATION ID | PROBE_IDS |
    +-------------+-----------+
    |           1 |         1 |
    |           1 |         2 |
    |           1 |         3 |
    |           1 |         4 |
    |           2 |         5 |
    |           2 |         6 |
    |           2 |         7 |
    +-------------+-----------+
    

    这些选项或其他选项中的哪一个最适合构建数据,因为许多查询将按位置进行过滤。

1 个答案:

答案 0 :(得分:0)

由于这是多对一的关系,我会使用选项#2,即外键。连接表更适合多对多关系。

对于像这样的短语,全文索引似乎太重了。它可能甚至不适用于许多位置,因为全文索引具有将索引的最小字长。

相关问题