根据个人工作经验,归纳出几点优化查询数据的几点简单的思路,供大家参考,数据库为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的延迟加载机制有异曲同工之妙。
四.使用页面缓存
页面缓存默认允许,配置方法如下:
方法一:在<head>标签里增加如下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);