优化查询速度的几点经验

根据个人工作经验,归纳出几点优化查询数据的几点简单的思路,供大家参考,数据库为mysql,开发框架为Spring+SpringMVC+hibernate。

一.合理使用索引

      为经常作为查询条件的字段添加创建一个数据库索引,创建数据库索引的语句为:create index index_name on table_name(colum_name);

      创建索引要注意一下几点:

      1.索引会影响增删改的速度,对于经常需要增删改的字段慎用索引。

      2.索引对于基数小的字段作用不大,比如性别,只有男女两种,基数很小。

      3.索引通过创建一个B+树的数据结构来增加查询速度,会占用一定的存储空间。

二.对sql语句进行优化

      1.尽量少使用select * from 而是需要查询哪几列的数据就查出来哪几列的数据,比如select colum1,colum2,colum3 from。

      2.用NOT  EXISTS 代替NOT IN。

      3.避免在索引上使用IS NULL 或者IS NOT  NULL,用a>0等代替。

      4.使用like ‘%XXX%’或‘%XXX’不走索引,只有‘%XXX’走索引。

三.使用hibernate缓存机制

       hibernate有缓存的功能,分为一级缓存和二级缓存,一级缓存是session级别的,二级缓存是sessionFactory级别的,一级缓存默认开启,二级缓存需要手动配置,具体配解释见我的其他博文。

四,使用hibernate延迟加载的功能

      延迟加载就是指可以将不需要立马使用的实体延迟加载出来,使用它的时候再加载出来。具体解释见我的其他博文。

五.将hibernate中的hql语句改成sql语句

      hibernate支持hql语句和sql语句的查询,使用sql语句查询可以避免加载一些不必要的相关实体,和使用hibernate的延迟加载机制有异曲同工之妙。

四.使用页面缓存

     页面缓存默认允许,配置方法如下:

 方法一:在标签里增加如下meta标签。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=8">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

 方法二:在java代码中增加如下代码。

response.setHeader("Cache-Control","no-cache"); 
response.setHeader("Pragma","no-cache"); 
response.setDateHeader("Expires",0); 


你可能感兴趣的:(优化查询速度的几点经验)