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>
时间: 2024-10-21 03:29:32

mysql模糊查询的优化方法--亲自实践的相关文章

mysql性能优化-慢查询分析,优化索引最佳实践

数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显,我们究竟应该如何对MySQL数据库进行优化? 下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分,查询与索引优化分析等方面来说明这个问题. (一)服务器物理硬件的优化 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/O),我们现在用的都是SAS15000转的硬盘,

MYSQL之not in优化方法:left join

MYSQL之not in优化方法:left join Author:飘易 Source:飘易 正 文: 有一个项目,mysql 语句采用了not in,结果某些页面打开需要40多秒,排查sql语句后,发现是采用了 not in 语法导致全表扫描,消耗了大量的时间,飘易记录下优化的过程: 项目简介: 会议应该签到表 signshould :15万条数据 会议实际签到表 sign :10万条数据 请假表 leaves :1000条数据 其中字段:mid:会议id,uid:用户id [例一]:原先的

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

mark---[mysql多表关联查询的优化方法]

对于一个网站来说,数据库的结构至关重要.即要利于存储(入库不阻塞),又要利于查询(查询不锁表).网站数据库优化经验是一个积累的过程.下面就对多表关联查询的优化方法,举例说明. 现在社区分享类网站很火,就拿方维购物分享网站举例说明吧.也是对二次开发方维购物分享网站的一点总结,高手可以飞过. 购物分享的关键表有:分享表.图片表.文件表.评论表.标签表.分类表等. 围绕分享的表就么多,哇,那也不少啊.当我们查看一个图片的详细信息时,就要显示以上表里的信息.显示图片所属的分类.给图片打的标签.图片的评论

MySql模糊查询like通配符使用详细介绍

MySql模糊查询like通配符使用详细介绍 转载:http://chenpeng.info/html/2020 MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式. 一.SQL模式 SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的.下面显示一些例子.注意在你使用SQL模式时,你不能使用=或!=:而使用LIKE或NOT LIKE比较操作

MySQL模糊查询:LIKE模式和REGEXP模式

MySQL模糊查询提供了两种模式:LIKE模式和REGEXP模式. LIKE模式 LIKE模式是使用的LIKE 或 NOT LIKE 比较运算符进行模糊查询. SELECT 字段 FROM 表 WHERE 字段 LIKE[NOT LIKE] '条件' 针对条件,有以下几种通配符: 通配符 含义 % 表示任意一个或多个字符,可匹配任意类型和长度的字符 _ 表示任意单个字符,匹配单个任意字符 ESCAPE 关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符. 示例: #

mysql模糊查询 like/REGEXP

原文:mysql模糊查询like/REGEXP 增删改查是mysql最基本的功能,而其中查是最频繁的操作,模糊查找是查询中非常常见的操作,于是模糊查找成了必修课. like模式 like意思是长得像,有两个模式:_和% _表示单个字符,通常用来查询定长的数据,如查出所有姓王的三个字的人名,假设姓名列名为name,注意“王”后面有两个_ select name from 表名 where name like '王__'; %表示0个或多个任意字符,如查出所有姓王的人名 select name fr

thinkphp条件查询和模糊查询的一些方法

1 #文章管理 2 public function adminArticle(){ 3 $adminArticle=M("article"); 4 $arr_seach=$this->seach($adminArticle,10,"now desc","");//参数格式seach($db,$num,$order,$where) 5 ##按最早排序 6 if([email protected]empty($_POST['time'])){

SQL查询语句优化方法

以下是网上流传比较广泛的30种SQL查询语句优化方法: 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查