sql多字段模糊查询优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql多字段模糊查询优化相关的知识,希望对你有一定的参考价值。
在实际开发中经常会遇到同一个关键字需要对多个字段模糊查询,比如一个用户表在输入关键字查询时可能要对用户名、用户姓名、联系电话等字段进行模糊查询
如果写成:where userName like ‘%关键字%‘ or fullName like ‘%关键字%‘ or mobile like ‘%关键字%‘这种方式会导致性能非常低,几十万条数据可能就要很长世间才查询出来,为了解决这个问题,可以把这几个字段拼接起来然后再对拼接的字符串进行字符串搜索,这样性能将得到非常高的提升;
在sql server中可以这样写:where charindex(‘关键字‘,ISNULL(userName,‘‘)+ISNULL(fullName,‘‘)+ISNULL(mobile,‘‘))>0
在orace中可以这样写:where instr(nvl(userName, ‘‘)||nvl(fullName,‘‘)||nvl(mobile,‘‘),‘关键字‘)>0
以上是针对关键字相同的时所编写的,如果关键字不同也可以这样写
在sql server中可以这样写:where charindex(‘关键字1‘,userName)>0 or charindex(‘关键字2‘,fullName)>0 or charindex(‘关键字3‘,mobile)>0
在orace中可以这样写:where instr(userName,‘关键字1‘)>0 or instr(fullName,‘关键字2‘)>0 or instr(mobile,‘关键字3‘)>0
注意在拼接字符串的时候一定要做null判断否则只要有一个字段为null拼接的结果都将为null
以上是关于sql多字段模糊查询优化的主要内容,如果未能解决你的问题,请参考以下文章