2017-01-06 37 views
0

我有关于LIKE运算符的问题。我创建查询,其与喜欢的事,比如搜索,我搜索街34:Mysql多个LIKE与“AND”

WHERE address LIKE '%Street%' AND address LIKE '%34%' 

问题是,如果我写太长地址MySQL查询减缓吓坏了。有没有可能有更快的解决方案?我知道有运营商REGEXPIN但他们搜索使用OR,但我需要搜索BY AND

ps:为什么我要写多个LIKE?因为有些人可能不是“街道34”而是“34街道”。

+1

是你的表正确索引? –

+1

我在BTREE中索引的相同,我索引FULLTEXT,然后只用文字搜索,但在我的情况下,它会更好地搜索每个字母后。最小字母从3开始 –

+0

如果LIKE操作数以**%** MySql无法使用INDEX开头。所以你的查询是一个**全表扫描**,看看@罗曼诺夫列夫写了什么 –

回答

0

添加一个您有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 

然后,所有你需要做的是在哪里以及联接。

您也可以在查询中使用。

另一种方法也可以是启用全文索引,它的功能相同(但更好),但在屏幕后面。

0

LIKE "%term%"不能从索引中受益,这意味着您正在对数据库进行全表扫描。你已经注意到这很慢。

你看过MySQL全文搜索吗?如果您使用myisam引擎,这将极大地加快速度:http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html

+0

是的,我已经检查了全文索引。它的工作更快,但在地址搜索相同。我有很多地址的数据库,我的观点是建立一个用户可以搜索地址的系统。关于全文索引问题,客户端可能并不完全知道一些地址名称,例如他写的城市名称卡尔斯,但他不知道如何结束它。并有许多变数,如他会写街道街道和城市,但数据库字符串将其保存为城市街道streen nr。我试图让搜索像谷歌以上smt –