我做了一个信息查询的页面,大概一次查询100个左右的数据(并且还要放到ArrayList列表里循环查询,大概循环10次,所以一个页面就得显示大概1000个左右的数据),sql语句就是简单的select * from 表名。
并且每个数据在查询出来之前都要做一个判断,就是判断这个数据在另外一个表里有没有这个值(判断方法写在了数据库查询方法里),这样一来导致查询非常慢,查一次需要10几秒钟,我想知道应该如何解决这个问题,急求,谢谢各位!!
并且每个数据在查询出来之前都要做一个判断,就是判断这个数据在另外一个表里有没有这个值(判断方法写在了数据库查询方法里),这样一来导致查询非常慢,查一次需要10几秒钟,我想知道应该如何解决这个问题,急求,谢谢各位!!
2.尽量不要使用select * .....,你可以选择字段查询
2,所使用到的表,以及表结构和索引结构
3,这些表的关系是什么
4,需要从这些表中查出什么数据供页面显示
5,简要地从技术角度(你是怎么写 SQL 语句的)描述一下你现在是怎么做的
6,你是用原始的 JDBC,还是什么 ORM 工具
select * 是不好的,影响效率。能在数据库处理的东西 就要在JAVA处理了
你的问题 还真的是没有几个人能看懂。
不能提供更详细的情况的话,大家只能建议你分页或优化SQL了。
因为一无所知啊
然后再将数据合并在一起送还页面展示当时差点被雷死
直接改成存储进程在db端全部解决完之后直接返回dataset了1000次绝对不至于慢的,access也不会很慢
重新架构一下你的数据访问流程了
在这里做循环。。而且在循环的时候,还要查询数据库
最后要比较数据是否存在于另一个表中。。至此,才算一个业务逻辑走完。。关键在这里。100 * 10 如果是用JDBC那会更慢。用联接池还好点。。但是开销也是很大的。。建议换个思路,改变一下逻辑。。尽量不要在循环里面再去查询数据库
假設表A,B,C
從A中查詢100條記錄,然後逐條查詢表B中對應的記錄,結果出來前判斷該條記錄是否在表C中存在,是這樣嗎?或者理解2是,只有兩張表A,B,查詢結果出來前判斷是否在表B中存在。無論是哪種情況,你都可以通過改sql來解決的。
如第一種情況,可以一次查出所有結果,jdbc只需要連接一次.select a.c1,b.c2,b.c3 from a,b where a.c1 = b.c1 and exists (select 1 from c where c.c4 = b.c4);不知道所用的數據庫是什麽,不過強烈建議樓主你好好讀讀《Oracle 9i10g编程艺术》,瞭解數據庫是如何工作的,項目中見過太多如類似樓主這樣的情況了,為了出來結果未考慮結果寫出來的代碼,在上線時是完全不能用的。比如在幷發情況下,若100個人在操作這個頁面,那麼JDBC對數據庫的請求數是100000,即使改數據庫session最大連接值也無濟於事了。
你用的是Ms sql server 2008 当然慢啦
技术区得分就靠这么关心问题而得分吗虽然我这回的也是P帖 但是我像纠正一下技术区的风气 技术分不是这么得的会就帮着解决 不会就观望得了呗总一副什么都关心的姿态 分真的那么总要吗 你关心半天得到了分自己不会不也白搭吗BS不解决问题的还回帖的
楼主在 MS SQL Server 版块发了一个同样的帖子
起码最基本的信息包括:数据库、表结构,既然2个表有联系,你得列出来,不要为了简单应付了事。
楼上很多人也提到,你必须说出你用到的ORM 是JDBC 还是hibernate?
另:楼主用ArrayList 这么一个类来存储结果集,这明显有很大的漏洞,因为搞web开发的人都清楚,ArrayList并不是线程安全的类,不适合作为结果集的迭代类。建议用Vector.
另:你所使用的前台页面迭代标签是怎样的? 表数据大概是多少万条记录?如果只是很小的表也不需要索引。
最直接有效的方法是减少SQL执行次数。看你描述至少执行11次左右---一次基本1秒,速度正常,变成一次不就行了。
把表结构,代码都贴出来,业务需求什么的。一次给你优化到底。健步如飞。
并且每个数据在查询出来之前都要做一个判断,就是判断这个数据在另外一个表里有没有这个值(判断方法写在了数据库查询方法里),
单这一点就可确认出LZ查询语句本身存在问题。
另外100条数据还是分一下页吧