我正在创建一个需要优化的表模式,其原因是这些表将具有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 %%更快吗?这是一个好习惯吗?
我见过大公司使用这种技术,但是,我想要你的意见。
提前谢谢!
答案 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)
上的索引。