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();
}
请大家指点下,怎么才能使得查询数度变快呢?
23 个解决方案
#1
强烈建议楼主采用分页。 想想都可怕一次性9万条数据。
难道楼主的主机是“银河处理器”
难道楼主的主机是“银河处理器”
#2
直接运行SQL语句,是什么样的效果?
如果直接运行快的话,就不用hibernate了呗
如果直接运行快的话,就不用hibernate了呗
#3
后面是采用 分页的方法呀,可是也很忙啊
#4
我的系统里面都是用hibernate来管理数据库的,又换成直接的,直接的是指用jdbc?这样不方便管理吧
#5
采用分页吧,先一次性查出前两百条数据,分为20页,当用户要再点击查看21页后面的数据时,要那一页的数据就去数据库查对应的数据。这是一种折中的策略、
#6
是采用分页的方法了,起初运行的很快,可是数据从10000条后获取1000就非常的慢了!困恼
#7
你电脑机子不行了吧? 我电脑几百万条数据查询都比你快啊
#8
lz用的什么db啊?
hibernate先试着用数据库的分页方法,如果没有则采用记录滚动的方法。
另外,你可以把数据库的分页语句 到sql的控制台上试试,我怀疑是表的外键什么的。
hibernate先试着用数据库的分页方法,如果没有则采用记录滚动的方法。
另外,你可以把数据库的分页语句 到sql的控制台上试试,我怀疑是表的外键什么的。
#9
才几万·~怎么可能这么慢哦~~~
Sql 语句的话 带上 limit 做限制 格式为 0,10; //从0开始取10条
Sql 语句的话 带上 limit 做限制 格式为 0,10; //从0开始取10条
#10
建一个索引啊
#11
1. 建索引字段。。。如你的id
2. 有可能你电脑配置太烂,自身硬件问题
3. 实在不行,就用jdbc进行sql分页,不用hibernate的分页,用mysql的limit
2. 有可能你电脑配置太烂,自身硬件问题
3. 实在不行,就用jdbc进行sql分页,不用hibernate的分页,用mysql的limit
#12
from Page page order by page.id asc
这个HQL语句里你改成
select 你要的字段1,字段2,。。。,字段n from Page page order by page.id asc
试试。
这个HQL语句里你改成
select 你要的字段1,字段2,。。。,字段n from Page page order by page.id asc
试试。
#13
你用的是什么查询方法?
#14
第一最好采用有索引的关键字或者主键作为查询条件.
第二不知道楼住用的是什么分页方法,如果纯考虑性能的话最好采用物理分页,即采用定位串技术定位数据位置,每次查询直接取需要的那一页数据.如果是逻辑分页的话那系统也是将数据都读取到内存在进行分页的,那么你越往后查它读取的数据越多当然越来越慢了!
第二不知道楼住用的是什么分页方法,如果纯考虑性能的话最好采用物理分页,即采用定位串技术定位数据位置,每次查询直接取需要的那一页数据.如果是逻辑分页的话那系统也是将数据都读取到内存在进行分页的,那么你越往后查它读取的数据越多当然越来越慢了!
#15
9W条数据对数据库来说绝对是小意思,即使不适用索引也不会那么慢吧。应该问题还是出在你的逻辑上。
#16
企业级查询不建议使用*,我觉得12楼正解
#17
用spring吗 我一般jdbcTemplate 和hibernateTemplate一起用的
#18
排除 机子 硬件问题 数据库没做优化 就是 数据库 除了存数据 没做其他的 优化处理 数据多了查询肯定慢 学学数据库 的查询优化 表的索引 建立视图 ...... 不过 这是 数据库工程师 该干的事 当然 你也必须 知道 点
#19
mysql 试试limit
#20
上银河cpu吧
#21
1.建索引
2.去掉select * 改成select 列名
3.分页
9W条数据 速度应该很快
2.去掉select * 改成select 列名
3.分页
9W条数据 速度应该很快
#22
哥从来不用HQL,太烂了
#23
写sql吧,手动优化sql语句
#1
强烈建议楼主采用分页。 想想都可怕一次性9万条数据。
难道楼主的主机是“银河处理器”
难道楼主的主机是“银河处理器”
#2
直接运行SQL语句,是什么样的效果?
如果直接运行快的话,就不用hibernate了呗
如果直接运行快的话,就不用hibernate了呗
#3
后面是采用 分页的方法呀,可是也很忙啊
#4
我的系统里面都是用hibernate来管理数据库的,又换成直接的,直接的是指用jdbc?这样不方便管理吧
#5
采用分页吧,先一次性查出前两百条数据,分为20页,当用户要再点击查看21页后面的数据时,要那一页的数据就去数据库查对应的数据。这是一种折中的策略、
#6
是采用分页的方法了,起初运行的很快,可是数据从10000条后获取1000就非常的慢了!困恼
#7
你电脑机子不行了吧? 我电脑几百万条数据查询都比你快啊
#8
lz用的什么db啊?
hibernate先试着用数据库的分页方法,如果没有则采用记录滚动的方法。
另外,你可以把数据库的分页语句 到sql的控制台上试试,我怀疑是表的外键什么的。
hibernate先试着用数据库的分页方法,如果没有则采用记录滚动的方法。
另外,你可以把数据库的分页语句 到sql的控制台上试试,我怀疑是表的外键什么的。
#9
才几万·~怎么可能这么慢哦~~~
Sql 语句的话 带上 limit 做限制 格式为 0,10; //从0开始取10条
Sql 语句的话 带上 limit 做限制 格式为 0,10; //从0开始取10条
#10
建一个索引啊
#11
1. 建索引字段。。。如你的id
2. 有可能你电脑配置太烂,自身硬件问题
3. 实在不行,就用jdbc进行sql分页,不用hibernate的分页,用mysql的limit
2. 有可能你电脑配置太烂,自身硬件问题
3. 实在不行,就用jdbc进行sql分页,不用hibernate的分页,用mysql的limit
#12
from Page page order by page.id asc
这个HQL语句里你改成
select 你要的字段1,字段2,。。。,字段n from Page page order by page.id asc
试试。
这个HQL语句里你改成
select 你要的字段1,字段2,。。。,字段n from Page page order by page.id asc
试试。
#13
你用的是什么查询方法?
#14
第一最好采用有索引的关键字或者主键作为查询条件.
第二不知道楼住用的是什么分页方法,如果纯考虑性能的话最好采用物理分页,即采用定位串技术定位数据位置,每次查询直接取需要的那一页数据.如果是逻辑分页的话那系统也是将数据都读取到内存在进行分页的,那么你越往后查它读取的数据越多当然越来越慢了!
第二不知道楼住用的是什么分页方法,如果纯考虑性能的话最好采用物理分页,即采用定位串技术定位数据位置,每次查询直接取需要的那一页数据.如果是逻辑分页的话那系统也是将数据都读取到内存在进行分页的,那么你越往后查它读取的数据越多当然越来越慢了!
#15
9W条数据对数据库来说绝对是小意思,即使不适用索引也不会那么慢吧。应该问题还是出在你的逻辑上。
#16
企业级查询不建议使用*,我觉得12楼正解
#17
用spring吗 我一般jdbcTemplate 和hibernateTemplate一起用的
#18
排除 机子 硬件问题 数据库没做优化 就是 数据库 除了存数据 没做其他的 优化处理 数据多了查询肯定慢 学学数据库 的查询优化 表的索引 建立视图 ...... 不过 这是 数据库工程师 该干的事 当然 你也必须 知道 点
#19
mysql 试试limit
#20
上银河cpu吧
#21
1.建索引
2.去掉select * 改成select 列名
3.分页
9W条数据 速度应该很快
2.去掉select * 改成select 列名
3.分页
9W条数据 速度应该很快
#22
哥从来不用HQL,太烂了
#23
写sql吧,手动优化sql语句