public List<Page> findAllPages() {
String hql = "from Page page order by page.id asc";
return (List<Page>) this.getHibernateTemplate().find(hql);
}
起初是调用这个方法,由于数据量太大,总是抛出内存不足的异常,后来改用分页处理的方法,但是越运行到后面,速度就越慢,差不多要10s才运行一条语句
  public List<Page> findPagesLimit(int x, int y) {
if (y == 0) {
return null;
}
Session session = this.getSession();
try {
String hql = "from Page page order by page.id asc";
Query q = session.createQuery(hql);
q.setFirstResult(x);
q.setMaxResults(y);
  List l = q.list();
if (l.size() == 0) {
return null;
}
return (List<Page>) l;
} catch (RuntimeException re) {
throw re;
} finally {
session.close();
}请大家指点下,怎么才能使得查询数度变快呢?
有人提出建立索引的方法,可是在mysql中 主键应该会自动建立索引的呀!

解决方案 »

  1.   

    建议直接贴你的SQL语句,这样方便面解MYSQL但不了解JAVA的人帮助分析你的问题。
      

  2.   

    select * from Page page order by page.id asc
      

  3.   

    select * from Page page order by page.id asc
    如果你的语句就直接是这个,则速度不会快了。全表的数据都取出,时间自然需要很长。
      

  4.   

    你这个sql
    分不分页有区别吗?
      

  5.   

    String hql = new StringBuilder("from Page page order by page.id asc limit ").append(x).append(",").append(y).toString();
    Query q = session.createQuery(hql);
    // q.setFirstResult(x);
    // q.setMaxResults(y);
    试试看呢
      

  6.   

    lz这个,应该会自动生成limit语句的。
    问题应该在索引或者数据库配置方面。