hibernate性能问题

我做了一个小测试,就是向数据库中插入了10w条数据,然后一个文本框,用ajax判断数据库中有没有输入的这个字段!写了2个方法,一个是用hibernate实现的查询!一个是jdbc实现的查询!hibernate用了1分40秒才返回1条数据!jdbc用了13秒返回1条数据!请问为什么他们之间有这么大的差距啊!我的电脑是奔4 3.0,内存两条512的,运行程序之前,内存使用是(1498M/2465M)!请问怎么才能提高hibernate的性能啊!

:x 没辙了。根据数据库去找本调优的书看看吧。先把name列的索引加上。

你怎么查的啊?才10w条就慢成这样?什么数据库啊?没加索引?

太正常了,等于你创建了10w个对象,放到内存了。不慢就怪了。

还是select count(t.name) from t where t.name=?吧,结果是0就说明不存在。

hibernate的第一次查询指定是慢的 因为服务器刚开时hibernate的第一次查询是从数据库中把查询的数据放到你的缓存中 只要服务器不停 以后查询速度就会快了 因为以后查询是直接从缓存中读取 而不是从数据库中查询 你可以试试用hibernate查询第二次的速度是否还会慢 你可以想想真正的服务器一旦开启以后是不可能停的

提升首次执行速度的话就只能在数据库中解决了 比如写个存储过程之类优化数据库的办法来提升查询数据库的速度 如果数据库不是很了解的话 那就没什么办法了 其事第一次查询慢没什么的 因为服务器刚启的时候可以自己先运行第一次 然后以后客户运行时就快了吗 呵呵 目前我就只知道这两种办法了

-_-你们真打算把10w条记录都加载在到缓存里?就不怕出问题?

他只是想测试一下到底hibernate与jdbc的查询速度

但是他的用法本身是错误的,你打算把他引到沟里去啊?

他要是为了做学术研究我就不多说了,可我怎么看他都是在用不熟悉的hibernate做实际项目。

你教给他把整个数据库都加在到缓存里再查。这样不好吧?万一他认为这样做是正确的操作怎么办?

普通操作的话9s也太慢了。实际应用里如果一个操作需要9s,客户会认为系统死掉了。

简单数据库调优就是为关键字段加索引,恐怕你的程序操作也要做优化,不要一次加载大量数据进内存,如果只需要一部分字段,建议通过select new map(name as name) from t这样的来减少对象的创建。

Long result = session.createQuery("count (name) from Login where name=?").setString(0, tname).uniqueResult();
if (result == 0) {
} else {
}

Long result = session.createQuery("count (name) from Login where name=?").setString(0, tname).uniqueResult();
if (result == 0L) {
} else {
}

恩。long应该是用0L。

恩 不好意思 你说的对 我确实是疏忽了这点