我遇到LIKE
运营商的问题。我创建的查询正在搜索类似的东西,例如,我搜索街道34:
WHERE address LIKE '%Street%' AND address LIKE '%34%'
问题是,如果我写的地址太长,MySQL查询速度会慢下来。有没有更快的解决方案?我知道有运营商REGEXP
或IN
,但他们使用OR
进行搜索,但我需要搜索BY AND
。
ps:为什么我要写多个LIKE
?因为有些人可能不会说“街34”而是“34街”。
答案 0 :(得分: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
然后你所要做的就是在哪里和加入。
您也可以在查询中使用。
另一种方法也可以是启用全文索引,它在屏幕后面执行相同(但更好)的操作。
答案 1 :(得分:0)
[City, County (if exists), State, Country, Population, Inception Date, Inception Type]
无法从索引中受益,这意味着您要对数据库进行全表扫描。你已经注意到这很慢了。
您是否看过MySQL全文搜索?如果你使用的是myisam引擎,这会大大加快速度:http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html。