java中遇到的Oracle查询速度问题

A1万条数据,表B1千万条数据
需要对表A的每条数据与表B进行模糊或者精确查询,单条数据查询的效果还是可以的,但是表A1万条数据,总的时间就慢了,有什么方法能提高总的查询速度吗?优化到5秒以内,或者说有什么其它办法能达到类似的效果?表A最大数据量20万,表B4千万。
需要返回的数据格式
表A数据1:
       结果1:
       结果2:
      ......
的格式
表A数据2:
       结果1:
       结果2:
的格式

用Java的线程池去并发获取查询结果,你的a表数据很多,对两个表链接的字段进行索引设计

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/722018
  • 这篇博客你也可以参考下:Java从Oracle中插入和读取图片
  • 除此之外, 这篇博客: java面试题中的 Oracle数据库分页的三种方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果
    – 所以直接用只能从1开始
    – rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。
    select * from student where rownum>=1;

    –如果想要用rownum不从1开始,需按下面方法使用
    select a1.* from (select student.*,rownum rn from student) a1 where rn >5;

    –分页查询一
    select * from (select a1.,rownum rn from (select * from student) a1 where rownum <=5) where rn>=2;
    –分页查询二
    select a1.
    from (select student.,rownum rn from student where rownum <=5) a1 where rn >=3;
    –分页查询三
    select a1.
    from (select student.*,rownum rn from student) a1 where rn between 3 and 5;

  • 您还可以看一下 夏昊老师的极简JAVA十八:Oracle数据库课程中的 oracle环境配置小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对查询速度慢的问题,可以考虑以下几种优化方法:

    1.优化SQL查询语句 通过优化查询语句可以减少不必要的查询次数,例如:

    • 避免使用select *
    • 使用索引
    • 减少子查询
    • 避免使用in/not in子句
    • 避免使用LIKE语句
    • 避免使用ORDER BY等

    2.使用PreparedStatement代替Statement PreparedStatement是在执行前编译的,可以提高执行速度,预编译的代码可缓存,也能够防止sql注入。

    3.使用连接池 每次会话后关闭连接,会造成频繁创建和关闭连接的消耗,使用连接池可以减少连接创建和销毁的次数。

    4.增大内存缓存大小 内存缓存大小是影响数据库性能的一个重要因素,可以适当增加内存缓存大小以减少磁盘I/O次数。

    5.避免占用表锁 表锁是针对整张表的,当一行被锁定时,其它行无法访问,占用表锁可能会导致性能急剧下降,应该尽量避免占用表锁。

    6.使用查询缓存 查询缓存可以缓存查询结果,当再次查询相同的结果时不需要再次访问数据库,直接从缓存中获取,提高查询性能。

    实践中,需要根据实际情况综合考虑并采用一些或全部优化方法,减少不必要的数据库I/O,提高数据库查询性能。