动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.轻松有效检查Java代码的三个工具.
.管理 Java 类路径(UNIX 和 Mac .
.junit的开发(eclipse插件开发系列.
.详细的 spring 入门实例讲解运用.
.J2SE简介.
.Java的测试规范.
.java中文件长度的转换.
.Spring系列第2部分:当Hibernate遇.
.Java程序把Word文档直接转换成HT.
.一个java中创建class的实例.
.使用JRockit5.0运行BEAWorkshop/.
.揭开Java 安全标准的神秘面纱.
.java线程简介(同步详细信息).
.JAVA入门教程:第一章.
.银行取款机Cash系统源程序.
.一个连接池的例子(来自JIVE).
.关于解决 Java 编程语言线程问题.
.用JDBC连接数据库(1).
.企业应用Web服务安全:问题介绍(.
.浮点型(Floating-Point Types).

JDBC性能优化技巧

发表日期:2008-1-5 |



  ·  假如可能,避免访问数据库
  
  ·  为应用选择最好最快的 JDBC 驱动 ,参考本站文章 。 JDBC3.0提供了新的特性来提高性能,诸如连接池, statemente池的改进 
  
  · 对数据库使用连接池并且重用连接,而不要重复打开和关闭连接。最佳的连接池大小是当连接池大到足够使服务请求不等待
  
  ·  尽量使用支持 JDBC3.0 的驱动,因为 JDBC3.0 支持包括 DataSource 对象,连接池,分布式事务支持, RowSets 和 prepared statement 池等性能增强特性
  
  ·  Prepared statement 池(自从 JDBC3.0 开始有)高速缓存已经预先优化并运行了的 SQL 查询,这样,他们被再次请求的时候,不必经历再次的优化预处理(避免最优化步骤,诸如检查语法,验证地址,优化访问路径和执行计划)。 Statement 池是一个很好的,重要的性能优化方法
  
  ·  JDBC3.0 中的 Statement 池和连接池能合作共享 statement 池,这样,能使用一个已高速缓存的 statement (该 statement 来自另外一个连接)的连接,在由任一连接执行的 一些SQL 首次被执行时,产生的 statement 预备开销仅一次
  
  ·  RowSet对象与 ResultSet 对象相似,但是能提供当断开连接的时候对数据库数据的访问。这答应数据以它最简单的形式被高效的高速缓存
  
  ·  用同一个连接执行多个 statements
  
  ·  关闭 autocommit ,但不要让事务打开太久
  
  ·  避免将事务分布开(事务跨越多个连接)
  
  ·  最小化数据库的行和列数据获取。使用 setMaxRows, setMaxFieldSize,和 SetFetchSize
  
  ·  使用最高效的数据类型:字符串比整数型快,整数型比浮点类型和时间戳类型都要高效(是否不太理解^&^,这是针对DB2数据库处理来说的,处理character类型最快,而处理integer类型通常需要一些转换或者字节排序)
  
  ·  使用 updateXXX()方法更新: updateXXX() 在可更新的结果集上调用。结果集已经定位到了一行 , 因此当使用一个 UPDATE statement 时,可以消除通常的查找要更新的数据行的开销
  
  ·  Cache任何请求的元数据( metadata )并尽可能少的使用元数据 方法,其慢的程度一用便知
  
  ·  避免在元数据 查询中使用 null 参数
  
  ·  使用虚拟查询获得一行的元数据,不要使用getcolumns()(假如应用答应用户使用列数据,应用是使用getColumns来返回列的信息给用户还是预备一个虚拟查询而后调用getMetadata呢?
  
  ·  使用存储过程,避免多余的网络传输
  
  ·  在存储过程中使用参量,不要将数据挨个地放在statement中,最小化解析开销。此条针对DB2来说,其它数据库未必适用。SQL总是以字符串形式发送给DB2数据库,例如:
  CallableStatement cstmt = conn.prepareCall ("call getCustName (12345)");
  ResultSet rs = cstmt.executeQuery ();
  DB2服务器必须解析该SQL,验证参量类型,并将参量转化为正确的数据类型。
  
  ·  对需要重复执行的statement使用预处理statement(PreparedStatement)
  
  ·  选择使用最佳游标:对连续读取使用游标;对双向滚动使用游标。对仅返回一行的查询避免使用游标。
  
  ·  在JVM中Cache频繁请求的数据,避免不必要的数据库请求
  
  ·  采用预读取机制, 批量取行,而不要一次一行 。调整批大小和预取行的数量。避免使用预取 BLOB 数据。
  
  ·  除非绝对需要,否则避免移动数据
  
  ·  在数据穿过网络之前要使流化数据( Streamline data )
  
  ·  避免每次处理一行,尽可能一起处理多行。
  
  ·  在表中统计个数(例如:使用 select count(*) from myTable,yourTable where …)属于资源密集型的。试试首先选入临时表,仅返回该计数(count),然后发送精确的二次查询获得临时表中的行的子集。
  
  ·  恰当的使用 SQL 能减少资源请求。使用返回所需数据的最小值的查询:避免 select * 查询。一个返回小的数据子集的复杂查询,比一个简单的,返回超过所需的大量数据的简单查询更高效。
  
  ·  使你的查询尽可能精巧,例如:尽可能精确地最小化要传输的数据,使其是所需的子集
  
  ·  努力批量更新:将 statement 收集到一起,然后在一个事务里面一起执行。假如可能,使用有条件的逻辑和临时变量来达到 statement 批处理
  
  ·  永远不要让 DBMS 事务跨越用户输入
  
  ·  考虑使用乐观锁。乐观锁使用时间戳验证数据是否还没有被其他用户改变,否则事务失败
  
  ·  使用 恰当的更新,例如:更新行/表中已经存在的数据,而不要添加或者删除行/表。在适当的位置更新数据要比移动数据快得多,假如更新需要的空间比表设计能提供的更多,这可能是需要的。假如你设计的行需要空间初始化,更新将会更快。交易是你的表可能需要更多的磁盘空间,但可能速度更快。由于磁盘空间是便宜的,使用一点点能提高性能,这应该说是非常有价值的投资
  
  ·  分开存储正在操作的数据和历史数据(更一般的情况是将频繁使用的数据和不常使用的数据分开存储)
  
  ·  尽可能小的保留你的操作数据集,避免必须读那些不相关的数据
  
  ·  DBMS可以很好的并行运转,尽量将应用设计成当和 DBMS交互时应用能做其他事情。
  
  ·  使用流水线操作和并行操作。 将应用设计成支持大量并行进程, 使应用运行更快。假如要处理多步,努力设计好应用,以使后来的步骤能够在任何优先的进程已经完成的数据部分上开始工作,而不是必须等到优先进程完成
  
  · 事物的保护级别越高,性能损失就越大。事物级别按增长的顺序为: TRANSACTION_NONE, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE。使用Connection.setTransactionIsolation() 设置你想要的事物级别
  
  · 默认的自动提交模式由于使每一个数据库命令都成为一个单独的事务,这会严重影响性能,关闭自动提交(Connection.setAutoCommit(false) ),明确声明事务
  
  ·  通过整合多个事务为一个的批量操作,并在一个statement中使用Statement.addBatch() 和Statement.executeBatch()
  
  · Savepoints (from JDBC3.0)需要昂贵的资源。一旦不再需要,就马上使用Connection.releaseSavepoint()释放掉Savepoints
  
  ·  ConnectionPoolDataSource (from JDBC3.0)和PooledConnection接口为连接池提供了built-in支持
  
  · 使用setLogWriter() (from Driver, DataSource, or ConnectionPooledDataSource; from JDBC3.0) 帮助跟踪JDBC流
  
  · 使用Connection.setReadOnly(true)优化只读数据库(操作)交互
  
  · 使用Connection.nativeSQL()察看SQL查询如何在数据库种执行,帮助确保SQL已被优化
  
  ·切记:一旦可能,马上关闭Statement和ResultSet
  
  ·使用DatabaseMetaData获得数据库功能性信息
  
  ·一直捕捉和处理数据库警告和异常
  
  ·使用最恰当的数据类型明确数据的类型,例如:以date类型存储日期,儿不要用varchar
  
  ·使用可滚动ResultSet (JDBC 2.0)
上一篇:Apache Beehive——Workshop运行时的发展 人气:439
下一篇:JDBC 程序实例 人气:1185
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-29 时尚DJ舞曲小偷 v3.1
2008-8-29 仿代码信息分类系统 v1.0 Beta3
2008-8-29 浮梦呓语-个人网站 完整版
2008-8-29 多用户QQ空间Flash播放器
2008-8-29 美思卡企业网站管理系统高级版
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵