Mysql的几种搜索FullText、Instr、Like
2014-09-11 15:15
357 查看
使用全文搜索,要把数据库引擎设置为myisam,该引擎不支持事务处理,设置完还要把要搜索的列设置fulltext索引,效率上全文搜索据说最高,是在数据量达到几百万的时候,但是全文搜索使用模糊查询效率又很低,还不如like,且全文搜索不支持中文;
instr效率比like要好,我测的结果是instr效率在数据量三百万的时候比like稍微快几十毫秒,如果对搜索的列创建index,那么instr和like的效率都提高两倍还多,所以还是建索引效果明显;
综上,当使用模糊查询时,第一要建索引;第二,用instr替换like。
instr(str1,str2)
有两种用法:一种是前面参数写变量,后面写列名;还有就是位置调换。两种有不同的效果,instr(str1,str2)的意思是str2在str1中,如果后面写变量前面写列名,则表示搜出表中所有str1列中值包含str2变量的数据,这时候跟(列名 like '目标表里')的效果是一样的;
instr还有一个需要注意的地方,就是对该函数返回结果值的判断,不写时默认是判断 "> 0";共有三种可能,每种对应情况如下:
----------------------
instr(title,'name')>0 相当于 title like '%name%'
instr(title,'name')=1 相当于 title like 'name%'
instr(title,'name')=0 相当于 title not like '%name%'
instr效率比like要好,我测的结果是instr效率在数据量三百万的时候比like稍微快几十毫秒,如果对搜索的列创建index,那么instr和like的效率都提高两倍还多,所以还是建索引效果明显;
综上,当使用模糊查询时,第一要建索引;第二,用instr替换like。
instr(str1,str2)
有两种用法:一种是前面参数写变量,后面写列名;还有就是位置调换。两种有不同的效果,instr(str1,str2)的意思是str2在str1中,如果后面写变量前面写列名,则表示搜出表中所有str1列中值包含str2变量的数据,这时候跟(列名 like '目标表里')的效果是一样的;
instr还有一个需要注意的地方,就是对该函数返回结果值的判断,不写时默认是判断 "> 0";共有三种可能,每种对应情况如下:
----------------------
instr(title,'name')>0 相当于 title like '%name%'
instr(title,'name')=1 相当于 title like 'name%'
instr(title,'name')=0 相当于 title not like '%name%'
相关文章推荐
- mysql 全文搜索 FULLTEXT
- paip.mysql fulltext 全文搜索.最佳实践.
- paip.mysql fulltext 全文搜索.最佳实践.
- Mysql 使用instr代替like
- MYSQL的FULLTEXT索引功能
- mysql索引类型normal,unique,full text
- mysql索引方法--BTREE, FULLTEXT, HASH, RTREE
- Mysql FULLTEXT索引说明
- MySQL Fulltext 全文检索中文分词补丁
- mysql索引类型 normal, unique, full text
- mysql fulltext
- Linq实践系列(1):一行代码实现DataTable全文搜索(Full Text Search)
- Getting Started With MySQL's Full-Text Search Capabilities
- MySQL全文索引 Fulltext
- MySQL全文索引 Fulltext
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
- 如何为Postgresql数据库全文搜索(full text search)编写解析器(parser)
- mysql索引的分类... btree hash fulltext rtree
- Mysql like 中文搜索问题
- MySQL 全文检索(full_text) stopword 设置