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

shadow_xiong 2011-10-31 12:26:58
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();
}

请大家指点下,怎么才能使得查询数度变快呢?
...全文
1526 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangaobing 2011-11-01
  • 打赏
  • 举报
回复
写sql吧,手动优化sql语句
nanjiwubingqq 2011-11-01
  • 打赏
  • 举报
回复
哥从来不用HQL,太烂了
傻根她弟 2011-11-01
  • 打赏
  • 举报
回复
1.建索引
2.去掉select * 改成select 列名
3.分页

9W条数据 速度应该很快
法师csdn 2011-11-01
  • 打赏
  • 举报
回复
上银河cpu吧
AoYuanSE 2011-11-01
  • 打赏
  • 举报
回复
mysql 试试limit
hrzjojo 2011-11-01
  • 打赏
  • 举报
回复
排除 机子 硬件问题 数据库没做优化 就是 数据库 除了存数据 没做其他的 优化处理 数据多了查询肯定慢 学学数据库 的查询优化 表的索引 建立视图 ...... 不过 这是 数据库工程师 该干的事 当然 你也必须 知道 点
wusi19910719 2011-10-31
  • 打赏
  • 举报
回复
你电脑机子不行了吧? 我电脑几百万条数据查询都比你快啊
shadow_xiong 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mrwangxiao0605 的回复:]

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

是采用分页的方法了,起初运行的很快,可是数据从10000条后获取1000就非常的慢了!困恼
肖邦 2011-10-31
  • 打赏
  • 举报
回复
采用分页吧,先一次性查出前两百条数据,分为20页,当用户要再点击查看21页后面的数据时,要那一页的数据就去数据库查对应的数据。这是一种折中的策略、
shadow_xiong 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xinlingwuyu 的回复:]

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

我的系统里面都是用hibernate来管理数据库的,又换成直接的,直接的是指用jdbc?这样不方便管理吧
shadow_xiong 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 bearshadow 的回复:]
public List<Page> findAllPages() {
String hql = "from Page page order by page.id asc";
return (List<Page>) this.getHibernateTemplate().find(hql);
}
起初是调用这个方法,由于数据量太大,总是抛出内存不足的异常,后来改用分页处理的方法,但是越运行到……
[/Quote]

后面是采用 分页的方法呀,可是也很忙啊
xinlingwuyu 2011-10-31
  • 打赏
  • 举报
回复
直接运行SQL语句,是什么样的效果?
如果直接运行快的话,就不用hibernate了呗
ylovep 2011-10-31
  • 打赏
  • 举报
回复
强烈建议楼主采用分页。 想想都可怕一次性9万条数据。

难道楼主的主机是“银河处理器”
贪睡的兔子 2011-10-31
  • 打赏
  • 举报
回复
用spring吗 我一般jdbcTemplate 和hibernateTemplate一起用的
ld191474639 2011-10-31
  • 打赏
  • 举报
回复
企业级查询不建议使用*,我觉得12楼正解
jc8futao 2011-10-31
  • 打赏
  • 举报
回复
9W条数据对数据库来说绝对是小意思,即使不适用索引也不会那么慢吧。应该问题还是出在你的逻辑上。
LW1981 2011-10-31
  • 打赏
  • 举报
回复
第一最好采用有索引的关键字或者主键作为查询条件.

第二不知道楼住用的是什么分页方法,如果纯考虑性能的话最好采用物理分页,即采用定位串技术定位数据位置,每次查询直接取需要的那一页数据.如果是逻辑分页的话那系统也是将数据都读取到内存在进行分页的,那么你越往后查它读取的数据越多当然越来越慢了!
shadow_xiong 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wusi19910719 的回复:]

你电脑机子不行了吧? 我电脑几百万条数据查询都比你快啊
[/Quote]
你用的是什么查询方法?
宁波朱超 2011-10-31
  • 打赏
  • 举报
回复
from Page page order by page.id asc
这个HQL语句里你改成
select 你要的字段1,字段2,。。。,字段n from Page page order by page.id asc
试试。
kouyiSC 2011-10-31
  • 打赏
  • 举报
回复
1. 建索引字段。。。如你的id
2. 有可能你电脑配置太烂,自身硬件问题
3. 实在不行,就用jdbc进行sql分页,不用hibernate的分页,用mysql的limit
加载更多回复(3)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧