javamysql-jdbc与Hibernate关于Select查询的实现
很抱歉这个模糊的问题,因为我不知道如何用合适的句子来写,如果你们中有人想把它编辑成更有意义的东西,请继续 我实际上想问,当我们做这样的事情时:javamysql-jdbc与Hibernate关于Select查询的实现,java,mysql,hibernate,Java,Mysql,Hibernate,很抱歉这个模糊的问题,因为我不知道如何用合适的句子来写,如果你们中有人想把它编辑成更有意义的东西,请继续 我实际上想问,当我们做这样的事情时: Select * from TableWithBillionRecords Limit 1000000 使用任一结果集: PreparedStatement.executeQuery() 或休眠: getCurrentSession().createQuery(query).list() 一旦执行该行,是否意味着web服务器实际上正在从我的数据库服
Select * from TableWithBillionRecords Limit 1000000
使用任一结果集:
PreparedStatement.executeQuery()
或休眠:
getCurrentSession().createQuery(query).list()
一旦执行该行,是否意味着web服务器实际上正在从我的数据库服务器中取出全部100万行?或者界面背后是否存在一些流逻辑
感谢您提供的信息,因为它帮助我决定是否应该将其拆分为多个查询,选择一块一块地进行查询,或者只选择一整组就可以了
再次感谢各位。大多数JDBC驱动程序的默认获取大小是10 在正常的JDBC编程中,如果要检索1000行,则需要在应用程序和数据库服务器之间进行100次网络往返来传输所有数据。这肯定会影响应用程序的响应时间 原因是JDBC驱动程序设计用于从数据库获取少量行,以避免任何内存不足问题 例如如果查询检索到100万行,JVM堆内存可能不够好,无法容纳大量数据,因此JDBC驱动程序被设计为检索少量(10行)一次处理行数,这样它可以支持任意数量的行,只要您有更好的设计来处理应用程序编码中的大行集 若将fetch size配置为100,则到数据库的网络访问次数将变为10。这将显著提高应用程序的性能
<强>当调整获取大小时要考虑的重要注意事项:< /强>
- 做
- 进行分析(尽管您可能应该在数据库中进行分析,而不是在客户端)
特别是,在数据库中,像JDBC或其他一些ORM一样缓慢地滚动它。但它不需要。在Hibernate项目中,您始终可以使用普通的JDBC。搜索JDBC分页Hibernate是JDBC之上的一种更高级别的ORM。我不熟悉Hibernate,但在JDBC中,您可以使用setFetchSize()来获得有效的分块。@seand setFetchSize(Integer.MIN_VALUE)看起来很有希望,但可以确定的是,逐行“流”表示只有一个连接,对吗?如果是这样的话,那真是太棒了。。