+ -
当前位置:首页 → 问答吧 → 9万条数据,用select*全部查询mysql数据库,数度超级慢,求解。

9万条数据,用select*全部查询mysql数据库,数度超级慢,求解。

时间:2011-10-31

来源:互联网

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();
}

请大家指点下,怎么才能使得查询数度变快呢?

作者: bearshadow   发布时间: 2011-10-31

强烈建议楼主采用分页。 想想都可怕一次性9万条数据。

难道楼主的主机是“银河处理器”

作者: ylovep   发布时间: 2011-10-31

直接运行SQL语句,是什么样的效果?
如果直接运行快的话,就不用hibernate了呗

作者: xinlingwuyu   发布时间: 2011-10-31

引用楼主 bearshadow 的回复:
public List<Page> findAllPages() {
String hql = "from Page page order by page.id asc";
return (List<Page>) this.getHibernateTemplate().find(hql);
}
起初是调用这个方法,由于数据量太大,总是抛出内存不足的异常,后来改用分页处理的方法,但是越运行到……


后面是采用 分页的方法呀,可是也很忙啊

作者: bearshadow   发布时间: 2011-10-31

引用 2 楼 xinlingwuyu 的回复:

直接运行SQL语句,是什么样的效果?
如果直接运行快的话,就不用hibernate了呗


我的系统里面都是用hibernate来管理数据库的,又换成直接的,直接的是指用jdbc?这样不方便管理吧

作者: bearshadow   发布时间: 2011-10-31

采用分页吧,先一次性查出前两百条数据,分为20页,当用户要再点击查看21页后面的数据时,要那一页的数据就去数据库查对应的数据。这是一种折中的策略、

作者: mrwangxiao0605   发布时间: 2011-10-31

引用 5 楼 mrwangxiao0605 的回复:

采用分页吧,先一次性查出前两百条数据,分为20页,当用户要再点击查看21页后面的数据时,要那一页的数据就去数据库查对应的数据。这是一种折中的策略、


是采用分页的方法了,起初运行的很快,可是数据从10000条后获取1000就非常的慢了!困恼

作者: bearshadow   发布时间: 2011-10-31

你电脑机子不行了吧? 我电脑几百万条数据查询都比你快啊

作者: wusi19910719   发布时间: 2011-10-31

lz用的什么db啊?
hibernate先试着用数据库的分页方法,如果没有则采用记录滚动的方法。

另外,你可以把数据库的分页语句 到sql的控制台上试试,我怀疑是表的外键什么的。

作者: AFer198215   发布时间: 2011-10-31

才几万·~怎么可能这么慢哦~~~
Sql 语句的话 带上 limit 做限制 格式为 0,10; //从0开始取10条

作者: nizhicheng   发布时间: 2011-10-31

建一个索引啊

作者: hanjiaming   发布时间: 2011-10-31

1. 建索引字段。。。如你的id
2. 有可能你电脑配置太烂,自身硬件问题
3. 实在不行,就用jdbc进行sql分页,不用hibernate的分页,用mysql的limit

作者: kouyiSC   发布时间: 2011-10-31

from Page page order by page.id asc
这个HQL语句里你改成
select 你要的字段1,字段2,。。。,字段n from Page page order by page.id asc
试试。

作者: zhuchao_ko   发布时间: 2011-10-31

引用 7 楼 wusi19910719 的回复:

你电脑机子不行了吧? 我电脑几百万条数据查询都比你快啊

你用的是什么查询方法?

作者: bearshadow   发布时间: 2011-10-31

第一最好采用有索引的关键字或者主键作为查询条件.

第二不知道楼住用的是什么分页方法,如果纯考虑性能的话最好采用物理分页,即采用定位串技术定位数据位置,每次查询直接取需要的那一页数据.如果是逻辑分页的话那系统也是将数据都读取到内存在进行分页的,那么你越往后查它读取的数据越多当然越来越慢了!

作者: LW1981   发布时间: 2011-10-31

9W条数据对数据库来说绝对是小意思,即使不适用索引也不会那么慢吧。应该问题还是出在你的逻辑上。

作者: jc8futao   发布时间: 2011-10-31