一个查询的性能
今天项目中遇到一个模糊查询的性能问题,在一个输入框中模糊查询,结果分页显示.设计人员把该处设计为可以输入三种匹配类型数据:身份证,姓名,学籍号. 数据库中总共约十万条数据.我在输入框中随意输入一个身份证号码,发现等待"很长"一段时间才查出来,目测2秒左右.于是立即到后台方法生打印时间,运行结果约为1400ms.检查sql语句(前员工所写):
1 select a.ActualName,a.idCard ,a.compile,b.unitName,a.UserName 2 3 from a left join b on a.DepId=b.DepId
where a.ActualName like '%$conditon%' or a.UserName like '%$conditon%' or a.idCard like '%$conditon%'
select count(a.UserId) from a left join b on a.DepId=b.DepId where a.ActualName like '%$conditon%' or a.UserName like '%$conditon%' or a.idCard like '%$conditon%'
condition中是将传入的参数.看了之后,发现两个问题并作出修改:
select count(UserId) from a
where ActualName like '%$conditon%' or UserName like '%$conditon%' or idCard like '%$conditon%'
运行结果:查询时间几乎无变化.
后来再次分析SQL,发现应该是两个 "OR" 语句的模糊匹配消耗时间,然后将页面的一个输入框改为三个输入框分别接受不同查询条件,后台判断用户输入了哪些字段再进行模糊匹配,当输入字段自由一个时,再次运行结果:900ms,速度提高约1/3.(之前只有一个输入框用户一次也只能查询匹配一个字段).
看来不好的设计对程序性能影响也很大啊.
优质内容筛选与推荐>>