半年javaweb开发 性能很差 请各位老鸟拍砖 点评下 小弟先谢过了
补充一点 我觉得我这里慢的主要原因都是因为关联的太多 where后面的条件也多 我刚开始时条件不多 关联也不多 速度明显要快的多 这里有什么方法可以解决吗
public Paginate getBookInfoByPublishDateAndPublisher(Paginate paginate,
String unionSiteID,String publisher, Date fromDate, Date toDate, String bookName,
Double price1, Double price2, String vendor, String bookCategory) {
// TODO Auto-generated method stub
StringBuffer whereCause =new StringBuffer( "not exists(select l from UnionSiteProductList l where l.unionSiteID=? and b.bookID =l.productID)");
Vector paras = new Vector();
paras.add(unionSiteID);
if (publisher != null && publisher.trim().length() > 0) {
whereCause.append( (whereCause.length() > 0 ? " and " : "")
+ "b.publisherName like ?");
paras.add("%" + publisher + "%");
}
if (fromDate != null) {
whereCause.append( (whereCause.length() > 0 ? " and " : "")
+ "b.publishDate >= ?");
paras.add(fromDate);
}
if (toDate != null) {
whereCause.append( (whereCause.length() > 0 ? " and " : "")
+ "b.publishDate <= ?");
paras.add(toDate);
}
if (bookName != null && bookName.trim().length() > 0) {
whereCause.append((whereCause.length() > 0 ? " and " : "")
+ "b.bookName like ?");
paras.add("%" + bookName + "%");
}
if (price1 != null) {
whereCause.append( (whereCause.length() > 0 ? " and " : "")
+ "pp.productPrice >= ?");
paras.add(price1);
}
if (price2 != null) {
whereCause.append( (whereCause.length() > 0 ? " and " : "")
+ "pp.productPrice <= ?");
paras.add(price2);
}
if (vendor != null && vendor.trim().length() > 0) {
whereCause.append((whereCause.length() > 0 ? " and " : "")
+ "v.vendorName like ?");
paras.add("%" + vendor + "%");
}
if (bookCategory != null && bookCategory.trim().length() > 0) {
whereCause.append( (whereCause.length() > 0 ? " and " : "")
+ "bcv.bookCategoryName like ?");
paras.add("%" + bookCategory + "%");
}
String hql = "select b,pp,v,bcv from Book b,ProductItem i,Product p, "
+ "ProductPrice pp,Vendor v,BookCategoryView bcv "
+ " where b.bookID=i.entityID and b.deleteFlag=0 and b.flag=4 "
+ " and i.entityType=1 and i.deleteFlag=0"
+ " and i.productID=p.productId and p.productType=1 and p.deleteFlag=0 and p.isValid=1"
+ " and p.productId=pp.productId and pp.deleteFlag=0"
+ " and b.vendorID = v.vendorID "
+ " and b.bookCategoryCode=bcv.bookCategoryCode ";if (whereCause.length() > 0) { hql = hql + " and " + whereCause; } paginate = this.pagedQuery(hql, paginate, paras.toArray()); return paginate; }
问题补充
没人来? 我先自己弄个沙发 。。。
问题补充
放在一个ValidateUtil.isNull(String param) 里面多好;
我不知道你用的是什么框架还是纯的JDBC,如果用的是框架的话可以用其自带的分页,查询条件类似ibatis有动态SQL都可以用的;纯的去拼凑也是可以的。
不过都可以封装成一个方法; SQLUtil.addCause(String filed,String express) 这样代码复用稍微提高一点,美观一点;个人愚见,仅供参考
谢谢 我用的S2SH框架 拼凑SQL 这个也想过 只是感觉修改起来太麻烦 得从数据库修改入手
问题补充
1.修改方法难
2.获取数据慢
主要是获取数据慢
问题补充
成都 2K+
问题补充
如果时间很长的话分析出查询耗时在那里,然后做优化。
1,最简单的建索引,但这样插入会变慢,后期要修复索引。
2,改表结构,做数据冗余。
3,数据缓存
......等等
本人觉得连表查询不是最后的方法,尽量少用。当数据量大连表多的时候就会有性能问题了。
那用视图可不可以呢
问题补充
1.关联多的时候,可能把各表的这种数字条件放前面i.entityType=1这种关联条件b.bookID=i.entityID放后面
2.多条件下,数字条件在前,字符串条件在后
3.不要用过多的模糊查询,模糊查询用不上索引,会废了整个高效sql
4.精确条件放前面,模糊条件放后面
别小看放置顺序,看看数据库原理sql执行方面的你会懂的....
就说这么些
受教了 谢谢你
问题补充
是啊 佩服啊 十个参数。。。我还没写过超过四个参数的方法呢。。。看来是少见多怪了,唉!
呵呵 小弟是菜鸟 就别贬我了 这不需求的嘛 我也不想啊
问题补充
谢谢你 有时间我会去看的
问题补充
你可以试着把容易过滤的条件放在前面
我和你的问题差不多 我去试一下