`
leebai
  • 浏览: 64474 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Web下的分页显示性能,怀疑99%的人都没完全搞清楚,希望们能给个终极答案

阅读更多
1、执行select * from tab1 而不移动游标,DBServer会把数据全载入内存吗?如果“否”,游标从头移到尾,数据全载入内存吗?
2、jdbc返回ResultSet时,数据就全部从DBServer到AppServer了吗?不同类型的ResultSet,这点上有差别吗?
3、AppServer上的游标next(),需要和DBServer通讯吗?
4、不同的数据库厂家,不同的jdbc驱动,上述问题都一样吗?



希望[[[]]]们能给个终极答案


javaeye为什么要屏蔽[daxia]两个字?还是标题太长?
分享到:
评论
10 楼 lijie250 2007-05-01  
数据库在这方面做最大的优化
不过在数据很多的时候,肯定要设置maxRows
9 楼 dovecat 2007-04-29  
呵呵.所以对于多的数据,肯定要设置maxRows的.
8 楼 maoxiaolu2000 2007-04-29  
http://www.iteye.com/topic/21886?page=2

我感觉是hibernate 在操作sqlserver和mysql时有些许不同,感觉mysql自己应该有缓存数据,不知道对分页会不会有影响
7 楼 giscat 2007-04-29  
从实际应用的角度来说
一个返回成千上万条记录的查询是无意义的
在statement对象上可设置maxrows参数
设个2000条足够了
6 楼 giscat 2007-04-29  
1.全部载入
2。返回ResultSet时,数据全部到内存
3.rs.next()不与db交互
4.一样
5 楼 leebai 2007-04-28  
继续明确问题:

1、在DBServer中,一条完整的记录数据是什么时间载入内存的?连续N个空的next(),与relative(N)有多大差别?

2、上面两位已经算已经解决。


3.4、jdbc端,对小型数据库:经查jdbc驱动代码,hsqldb 的ResultSet总是取回所有数据,next()不会发生网络通讯;mysql driver(5.0.5)的statement产生的结果集也总是取回所有数据,preparedstatement产生的结果集,比较搞笑:We only stream result sets when they are forward-only, read-only, and the fetch size has been set to Integer.MIN_VALUE。也就是说,默认情况下也是取所有数据;如果硬设为动态结果集,则不支持relative()、isLast()等,因此其动态结果集实现不成熟。大库看了oracle的,scrollable结果集也是一次全部装入,普通结果集在next()逸出时要访问服务器。

初步结论是:如果用游标移动来翻页,小库适合用relative(N),但差别极小;而oracle用next()总体效率更高

原先设想:jdbc端,如果缓存用完,继续next(),但不进行.getXXX(),jdbc驱动有没可能优化成:.getXXX()发生时才取数据。看了这几个驱动,感觉是没厂家会这么做了,看来在DB端先减少结果集行数确实是必要的。
4 楼 memphis 2007-04-28  
1、执行select * from tab1 而不移动游标,DBServer会把数据全载入内存吗?如果“否”,游标从头移到尾,数据全载入内存吗?
>>>要根据分类和要求处理的,并不能简单的回答是与否。
2、jdbc返回ResultSet时,数据就全部从DBServer到AppServer了吗?不同类型的ResultSet,这点上有差别吗?
>>>不一定,加入数据少的话,自然就全部,否则的话只是一部分,至于这个数据量是可以自己设定的。
3、AppServer上的游标next(),需要和DBServer通讯吗?
>>>当全部到APPServer的时候自然就不需要与DbServer通讯了,和2是密切相关的。
4、不同的数据库厂家,不同的jdbc驱动,上述问题都一样吗?
>>>都差不多,只是细节实现处理的区别,至少我测试过的几个数据库是如此。
3 楼 leebai 2007-04-28  
to yiding_he,dlee:

我感觉DB端的cache策略、jdbc客户端的cache策略,各个厂家和驱动之间应该是有差别的。

比如我跟踪查过hsqldb jdbc的next(),就没访问socket的代码。但象oracle等大型库,应该是有的,谁能确认一下?
2 楼 yiding_he 2007-04-28  
1、执行select * from tab1 而不移动游标,DBServer会把数据全载入内存吗?如果“否”,游标从头移到尾,数据全载入内存吗?

>> 不知道。不过我相信数据库在这方面做的优化已经非常成熟了。

2、jdbc返回ResultSet时,数据就全部从DBServer到AppServer了吗?不同类型的ResultSet,这点上有差别吗?

>> 当然没有,顶多是预取一部分数据,取多少可以自己指定。

3、AppServer上的游标next(),需要和DBServer通讯吗?

>> 如果不需要的话,就不会抛出异常了。

4、不同的数据库厂家,不同的jdbc驱动,上述问题都一样吗?

>> 反正都是按照标准,以最优化的方式实现。
1 楼 dlee 2007-04-28  
可以参考一下Hibernate的分页实现:
以下是Spring的HibernateTemplate类对于Hibernate的分页功能的封装代码:
public List findByCriteria(final DetachedCriteria criteria, final int firstResult, final int maxResults)
	throws DataAccessException {

	Assert.notNull(criteria, "DetachedCriteria must not be null");
	return (List) execute(new HibernateCallback() {
		public Object doInHibernate(Session session) throws HibernateException {
			Criteria executableCriteria = criteria.getExecutableCriteria(session);
			prepareCriteria(executableCriteria);
			if (firstResult >= 0) {
				executableCriteria.setFirstResult(firstResult);
			}
			if (maxResults > 0) {
				executableCriteria.setMaxResults(maxResults);
			}
			return executableCriteria.list();
		}
	}, true);
}

你需要了解一下Hibernate的Criteria类在执行了setFirstResult和setMaxResults两个方法之后做了些什么事情。我也没有仔细读过Hibernate这方面的实现。不过Hibernate对于数据分页,提供了较为理想的解决方案,使得开发者不必自己去关注具体数据库JDBC driver的实现细节。基于Hibernate的应用,一般数据分页最终都是调用Hibernate本身提供的分页支持。

相关推荐

    java web分页显示

    在Java Web开发中,分页显示是一项非常重要的功能,它能有效地管理大量数据,提高用户体验,避免一次性加载过多数据导致的性能问题。本教程将详细讲解如何在SQL Server 2005数据库环境下,利用JDBC进行分页查询,以...

    一个WEB的分页控件

    在Web开发中,分页控件是不可或缺的一部分,它用于处理大量数据的显示,提高用户体验,避免一次性加载过多数据导致页面加载慢或者内存消耗过大。本篇将详细讲解Web分页控件的设计原理、实现方式以及相关技术点。 ...

    web实现简单分页

    在Web开发中,分页是一种常见的用户界面设计技术,它用于处理大量的数据并提供良好的用户体验。当一个网页上的数据量过大时,一次性加载所有数据可能会导致页面加载速度变慢,甚至对服务器造成压力。因此,分页允许...

    javaweb_分页显示数据库内容

    无论是哪种方法,分页都是 Java Web 应用程序中的一个重要组件,需要根据实际情况选择合适的方法来实现分页功能。 Java Web 分页显示数据库内容是指在 Java Web 应用程序中实现在数据库内容的分页显示。通过使用 ...

    10种 js web分页效果

    JavaScript(简称JS)是Web开发中的重要组成部分,用于实现丰富的交互性和动态效果。在Web页面中,当数据量过大时,为了提高用户体验和加载速度,通常会采用分页技术来展示内容。本教程将深入探讨10种不同的JS Web...

    Web分页控件例子Demo

    在Web开发中,分页控件...综上所述,"Web分页控件例子Demo"是一个涵盖前端和后端的分页实现教程,通过学习和分析这个示例,开发者可以掌握如何在实际项目中有效地集成和定制分页控件,以提高Web应用的性能和用户体验。

    大工论文 基于Web的分页技术的研究与实现.docx

    当我们在浏览网页时,不可避免地会碰到有的数据不能在一个页面完全显示出来的问题,这个时候就需要一种技术来使得数据分成若干页来显示,分页技术就应运而生。 本文主要探讨了一种基于Web的分页技术的研究与实现,...

    基于Java-Web的分页技术研究.pdf

    本文研究了基于Java-Web的分页技术,这对于提高Web应用的信息检索效率和用户体验具有重要意义。分页显示技术允许用户通过分块的方式查看大量数据,避免了数据量过大而导致的性能下降和用户体验下降的问题。 在引言...

    C# web分页控件

    这些控件都内置了分页功能,可以方便地进行数据分页显示。在本例中,我们主要关注GridView,因为它是最常用且易于操作的控件之一。 1. GridView控件 GridView控件是一个强大的数据绑定控件,能够以表格形式展示...

    Web用户控件分页

    Web用户控件分页是指在ASP.NET环境中创建一个自定义的用户控件,用于实现网页上的数据分页展示。这样的控件可以方便地重复使用,并且能够根据项目需求进行定制。 **一、Web用户控件的概念** Web用户控件是ASP.NET...

    java web项目分页通用实现

    在Java Web开发中,分页是一项非常常见的需求,它能够帮助用户更有效地浏览大量数据,提高用户体验。本DEMO主要展示了如何实现一个通用的分页功能,覆盖了后台和前台的处理逻辑。以下是对这个主题的详细阐述: 一、...

    JS 实现web分页打印功能

    2. **分页控制**:默认情况下,浏览器会自动处理分页,但可能不完全符合我们的需求。我们可以通过CSS属性`page-break-after`和`page-break-before`来控制元素间的分页位置,避免内容被分割到不同页面。 ```css div....

    java分页web实现

    Java分页技术是Web开发中的一个关键组成部分,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页显得尤为重要。本教程将详细讲解如何在Java环境下实现Web应用的分页功能,并提供一个测试数据库供学习者参考...

    jsp-web开发通用分页标签

    在Web开发领域,分页是不可或缺的一个功能,尤其是在处理大量数据时,为了提高用户体验和页面加载速度,通常会采用分页展示数据。本教程将详细讲解如何使用JSP(JavaServer Pages)技术来实现一个通用的分页标签,...

    ireport控制分页显示

    在探讨“ireport控制分页显示”的主题时,我们深入解析如何在iReport设计工具中实现每页固定记录条数的分页显示功能。iReport是JasperReports的一部分,一个强大的开源报表工具,广泛用于Java应用程序中生成各种复杂...

    将Web层分页封装成通用模块

    在Web开发中,分页是常见的功能之一,特别是在数据量庞大的场景下,为了提高用户体验,我们需要将大量数据分批次展示,而不是一次性加载所有内容。本文将深入探讨如何将Web层的分页功能封装成一个通用模块,实现代码...

    web分页代码

    在Web开发中,分页是一种常见的用户界面设计技术,用于处理大量数据的显示。它将大量数据分成小块,每次只加载一部分,这样可以提高页面加载速度,改善用户体验。本主题将深入探讨“web分页代码”的实现,涵盖关键...

    web分页控件(代码)超级简单的

    在Web开发中,分页控件是一个非常常见且重要的组件,尤其在数据量庞大的场景下,如电商网站的商品列表、论坛的帖子等。本压缩包中的"web分页控件(代码)超级简单的"提供了这样一个基础功能的实现,旨在帮助开发者...

    分页显示数据技术

    总的来说,理解并掌握分页显示数据技术,对提升Web应用性能和用户体验有着显著的作用。开发者需要根据实际需求和项目特点,选择合适的分页实现策略,并合理利用如Struts和Hibernate这样的工具,以提高开发效率和代码...

    C#DataGridView分页显示功能实现

    当数据量较大时,一次性加载所有数据可能导致性能问题,因此需要实现分页显示功能。本篇文章将详细讲解如何在C# WinForm应用中实现`DataGridView`的分页功能。 首先,我们需要了解`DataGridView`的基本用法。`...

Global site tag (gtag.js) - Google Analytics