mysql模糊查询的优化方法--亲自实践

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql模糊查询的优化方法--亲自实践相关的知识,希望对你有一定的参考价值。

数据有4W多条,不多,但是模糊查询


起来特别慢。

1,尝试过用 select * from (select * from a union all select * from b。。。很多表union) as tempTable where name like "%a%" and person_id like "%1%",发现太慢了。。

2,尝试使用具体的字段,而不是*,即

  select id,name,person_id from (select id,name,person_id from a 

union all select id,name,person_id from b。。。很多表union) as tempTable where name like "%a%" and person_id like "%1%",虽然快了点儿,但是不是特别快。。

3,尝试把where放在每一个select语句中,不需要汇聚成一个表了,即少了别名:

  select id,name,person_id from a where name like "%a%" and person_id like "%1%"

union all select id,name,person_id from b where name like "%a%" and person_id like "%1%", 卧槽,出乎意料地快!解决了问题。

4,mybatis配置文件如下:

模糊查询的总数:

  <select id="getFaceDataCount" resultType="int">
  select sum(c) from
    (<foreach collection="companyCodeList" item="item" index="index" 
			separator="union">select count(1) as c from ${item} 
		<where>
      		 <if  test="faceData.personId != null and faceData.personId != ‘‘">
          		 and person_id like ‘%${faceData.personId}%‘
       		</if>
       		<if  test="faceData.name != null and faceData.name != ‘‘">
         		  and name like ‘%${faceData.name}%‘
      		 </if> 
   		</where> 	
	</foreach>) as faceCount 
  </select>

模糊查询的详细:

  <select id="selectAllFaceData" resultMap="BaseResultMap">
   <foreach collection="companyCodeList" item="item" index="index" 
    separator="union">(select <include refid="Base_Column_List" /> from ${item} 
    <where>
       <if  test="faceData.personId != null and faceData.personId != ‘‘">
            person_id like ‘%${faceData.personId}%‘
       </if>
       <if  test="faceData.name != null and faceData.name != ‘‘">
           and name like ‘%${faceData.name}%‘
       </if>
   	</where> 
			
        )</foreach>
    limit #{start},#{limit} 
   </select>


以上是关于mysql模糊查询的优化方法--亲自实践的主要内容,如果未能解决你的问题,请参考以下文章

mysql中Mysql模糊查询like效率,以及更高效的写法和sql优化方法

mysql中Mysql模糊查询like效率,以及更高效的写法和sql优化方法

如何优化Sql server 大数据量时使用 like 查询的速度?或有啥别的方法实现模糊查询?

MYSQL模糊查询优化(使用全文索引进行左右模糊查询) match() against ()的简单使用以及介绍

mysql 百万级数据的模糊查询 优化 笔记

Sql优化-多like模糊查询及根据时间排序