我有关于LIKE
运算符的问题。我创建查询,其与喜欢的事,比如搜索,我搜索街34:Mysql多个LIKE与“AND”
WHERE address LIKE '%Street%' AND address LIKE '%34%'
问题是,如果我写太长地址MySQL查询减缓吓坏了。有没有可能有更快的解决方案?我知道有运营商REGEXP
或IN
但他们搜索使用OR
,但我需要搜索BY AND
。
ps:为什么我要写多个LIKE
?因为有些人可能不是“街道34”而是“34街道”。
我有关于LIKE
运算符的问题。我创建查询,其与喜欢的事,比如搜索,我搜索街34:Mysql多个LIKE与“AND”
WHERE address LIKE '%Street%' AND address LIKE '%34%'
问题是,如果我写太长地址MySQL查询减缓吓坏了。有没有可能有更快的解决方案?我知道有运营商REGEXP
或IN
但他们搜索使用OR
,但我需要搜索BY AND
。
ps:为什么我要写多个LIKE
?因为有些人可能不是“街道34”而是“34街道”。
添加一个您有id和varchar字段的搜索表。
把每一个独特的单词放在里面。
制作一个链接表,将单词链接到他们的地址。
表不会忽略
Id address
1 34 bakersfield
2 steve irwing street 34
表字
Id word
1 34
2 bakersfield
3 steve
4 Irwing
5 Street
链接表
Street_id word_id
1. 1
1. 2
2. 3
2. 4
2. 5
2. 1
然后,所有你需要做的是在哪里以及联接。
您也可以在查询中使用。
另一种方法也可以是启用全文索引,它的功能相同(但更好),但在屏幕后面。
LIKE "%term%"
不能从索引中受益,这意味着您正在对数据库进行全表扫描。你已经注意到这很慢。
你看过MySQL全文搜索吗?如果您使用myisam引擎,这将极大地加快速度:http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html。
是的,我已经检查了全文索引。它的工作更快,但在地址搜索相同。我有很多地址的数据库,我的观点是建立一个用户可以搜索地址的系统。关于全文索引问题,客户端可能并不完全知道一些地址名称,例如他写的城市名称卡尔斯,但他不知道如何结束它。并有许多变数,如他会写街道街道和城市,但数据库字符串将其保存为城市街道streen nr。我试图让搜索像谷歌以上smt –
是你的表正确索引? –
我在BTREE中索引的相同,我索引FULLTEXT,然后只用文字搜索,但在我的情况下,它会更好地搜索每个字母后。最小字母从3开始 –
如果LIKE操作数以**%** MySql无法使用INDEX开头。所以你的查询是一个**全表扫描**,看看@罗曼诺夫列夫写了什么 –