使用预定义的关键字创建表模式

时间:2017-10-23 14:30:49

标签: mysql sql

我正在创建一个需要优化的表模式,其原因是这些表将具有300万到500万条记录。这里最关心的是搜索,在这种情况下,着名的LIKE %% ...不是一个选项,为了避免这种情况,在每次插入时,将基于主场创建3个关键词作为某事的名称,例如:

虚构的表格“城市”,包含以下列

id | name | visibility | key_1 | key_2 | key_3

所以让我们进入纽约市作为记录,在这种情况下,我们将有两个单词。

key_1 = new
key_2 = york

这样,在包含数百万条记录的表中搜索将如下所示:

select name from cities
    where visibility = 1
        and(
            key_1 = 'new' or
            key_1 = 'york' or
            key_2 = 'new' or
            key_2 = 'york'
        );

问题是:它会比全文或通配符LIKE %%更快吗?这是一个好习惯吗?

我见过大公司使用这种技术,但是,我想要你的意见。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

查询中的小修正:

select name from cities
    where visibility = 1
        and 'new' in (key1, key2) 
and 'york' in  (key1, key2) ;

答案 1 :(得分:1)

如果你想要表现,你需要一个名为CityKeys的表,每个城市有一行,每个键有一行。

然后您可以将查询编写为:

select c.name
from cities c
where c.visibility = 1 and
      exists (select 1 from citykeys ck where ck.cityid = c.cityid and ck.key = 'new') and
      exists (select 1 from citykeys ck where ck.cityid = c.cityid and ck.key = 'york') ;

如果密钥的排序很重要,那么您可以在逻辑中包含keynumber列。

然后可以利用citykeys(cityid, key)上的索引。