`
m7788
  • 浏览: 9874 次
  • 来自: ...
社区版块
存档分类
最新评论

JAVA中四种SQL执行方式性能测试

阅读更多

在这个项目中,由于一些原因没有使用orm进行数据库操作,而是使用Spring的JdbcTemplate

但在上线后发现效率很低,通过性能监视器发现SQL Compilations的比率很高,程序中大量使用动态拼SQL语句的情况

于是进行了一些性能测试

 

代码如下:

 

		Main.log("SQL四种执行方式性能比较");
		// Statement
		jt.execute("dbcc freeproccache");
		start = System.currentTimeMillis();
		sql = "select top {0} id, intStatus from tblInfo where charCityFrom=''{1}''";
		for (int i = citys.size() -1; i >= 0; i--) {
			Map c = citys.get(i);
			String city = (String) c.get("charCityFrom");
			jt.queryForList(MessageFormat.format(sql, i % 20 + 1, city));
		}
		map = jt.queryForMap("Select Count(*) CNT,sum(size_in_bytes) TotalSize From sys.dm_exec_cached_plans");
		Main.log("Statement:CNT=" + map.get("CNT") + " TotalSize=" + map.get("TotalSize"), start);
		
		// PreparedStatement
		jt.execute("dbcc freeproccache");
		start = System.currentTimeMillis();
		sql = "select top {0} id, intStatus from tblInfo where charCityFrom=?";
		for (int i = citys.size() -1; i >= 0; i--) {
			Map c = citys.get(i);
			String city = (String) c.get("charCityFrom");
			jt.queryForList(MessageFormat.format(sql, i % 20 + 1), new Object[]{city});
		}
		map = jt.queryForMap("Select Count(*) CNT,sum(size_in_bytes) TotalSize From sys.dm_exec_cached_plans");
		Main.log("PreparedStatement:CNT=" + map.get("CNT") + " TotalSize=" + map.get("TotalSize"), start);
		
		// EXEC sp_executesql
		jt.execute("dbcc freeproccache");
		start = System.currentTimeMillis();
		sql = "EXEC sp_executesql N''select top {0} id, intStatus from tblInfo where charCityFrom=@cityFrom'', N''@cityFrom nvarchar(10)'', ''{1}''";
		for (int i = citys.size() -1; i >= 0; i--) {
			Map c = citys.get(i);
			String city = (String) c.get("charCityFrom");
			jt.queryForList(MessageFormat.format(sql, i % 20 + 1, city));
		}
		map = jt.queryForMap("Select Count(*) CNT,sum(size_in_bytes) TotalSize From sys.dm_exec_cached_plans");
		Main.log("Sp_executesql:CNT=" + map.get("CNT") + " TotalSize=" + map.get("TotalSize"), start);
		
		// 存储过程
		jt.execute("dbcc freeproccache");
		start = System.currentTimeMillis();
		sql = "exec sp_FindInfoByCitFrom {0},''{1}''";
		for (int i = citys.size() -1; i >= 0; i--) {
			Map c = citys.get(i);
			String city = (String) c.get("charCityFrom");
			jt.queryForList(MessageFormat.format(sql, i % 20 + 1, city));
		}
		map = jt.queryForMap("Select Count(*) CNT,sum(size_in_bytes) TotalSize From sys.dm_exec_cached_plans");
		Main.log("Procedure:CNT=" + map.get("CNT") + " TotalSize=" + map.get("TotalSize"), start);

 

 得到结果(多次执行,结果相关不大):

2008-11-05 10:36:52.521 [main] - SQL四种执行方式性能比较
2008-11-05 10:36:53.365 [main] - Statement:CNT=224 TotalSize=9134080 t=829ms
2008-11-05 10:36:53.815 [main] - PreparedStatement:CNT=23 TotalSize=901120 t=450ms
2008-11-05 10:36:55.44 [main] - Sp_executesql:CNT=26 TotalSize=1351680 t=1625ms
2008-11-05 10:36:55.864 [main] - Procedure:CNT=25 TotalSize=933888 t=424ms

 

 

存储过程虽然性能最高,但维护确实有点麻烦

综合一下就我们的情况使用PreparedStatement最好,不过以前使用sql server 2000时有发现这个性能不好,看来跟生产环境还是有挺大关系

Sp_executesql的表现倒是出乎意料

 

经验主意害死人啊,就这个问题浪费了大量的时间

 

分享到:
评论

相关推荐

    java批量执行SQL

    本文将详细介绍如何利用Java进行批量SQL执行,包括其背景、实现原理、代码示例及优化策略等。 #### 一、批量执行SQL的背景与意义 在日常的业务场景中,如用户注册、数据迁移或系统初始化等,往往涉及到大量的数据...

    java控制台输出可执行sql,支持oracle,mysql,sqlserver,kingbas

    标题中的"java控制台输出可执行sql"指出这是一个Java库,它的主要功能是能够在控制台上显示应用程序执行的SQL语句。这通常对于调试和优化数据库交互的代码非常有用,因为可以直观地看到程序如何与数据库进行通信。这...

    java读取数据库表中内容转存sql文件,然后解析执行此文件

    在Java编程中,读取数据库表中的内容并将其转换为SQL文件,然后解析并执行这个文件,是一项常见的数据处理任务。这项操作可能涉及到数据库连接、数据查询、文件操作以及SQL语句的构建与执行。以下将详细介绍这个过程...

    Java 使用注解拼接SQL语句

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器或运行时环境用来执行特定的任务。"Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得...

    Java开发的sql生成器

    在集成这个Java SQL生成器到你的项目中,你需要按照文档的指示配置数据库连接,然后在需要的地方调用相应的API来生成SQL语句。通过这种方式,你可以专注于业务逻辑,而不是繁琐的SQL拼写,提高开发效率并降低出错...

    Oracle中SQL语句执行效率的查找与解决

    3. **SQL执行计划解析**:SQL语句的执行计划是理解其运行方式的关键。Oracle提供了多种工具来分析SQL执行计划,包括EXPLAIN PLAN和AUTOTRACE。通过这些工具,可以详细查看SQL语句如何访问表和索引,以及执行过程中...

    java-连接SQL测试

    总结来说,`java-连接SQL测试`程序演示了如何在Java中利用JDBC API与SQL Server进行交互,包括加载驱动、建立连接、执行SQL和关闭连接等基本操作,是学习Java数据库编程的重要实践案例。通过深入理解并实践这些步骤...

    java 超市管理系统 sql server

    4. 测试调试:对系统进行全面的功能和性能测试,修复问题。 5. 部署上线:在服务器上部署系统,进行实际运营。 综上所述,Java超市管理系统与SQL Server的结合,实现了高效、稳定的超市业务管理,为超市运营提供了...

    java代码实现的sql语句效果

    在Java编程中,SQL语句的执行是通过JDBC(Java Database Connectivity)接口来实现的。JDBC提供了一种标准的API,使得Java程序能够与各种数据库进行交互,包括插入、查询、更新和删除数据等操作。这篇博客“java代码...

    java 登陆界面 连接sql

    Java 登录界面与SQL数据库的连接是Web应用开发中常见的需求,主要涉及到以下几个关键技术点: 1. **Java Swing或JavaFX**: 这是构建登录界面的工具。Java Swing是Java AWT(Abstract Window Toolkit)的扩展,提供...

    网上银行系统 java sql server 编程

    系统上线前需要进行全面的测试,包括单元测试、集成测试、性能测试和安全性测试,确保所有功能正常且性能达标。上线后,定期的维护和更新也是必不可少的,以应对新的需求和安全威胁。 总的来说,这个网上银行系统...

    Java SqlServer 数据库驱动 jar

    2. **Microsoft JDBC Driver**: Microsoft提供了针对SQL Server的JDBC驱动,这些驱动程序符合Java Community Process (JCP) 规范,提供了一种标准的方式来连接Java应用程序和SQL Server数据库。在本压缩包中,包含的...

    java c/s sql srever oracle转换

    11. **测试与调试**:在完成转换后,进行全面的功能测试和性能测试,确保应用在Oracle环境中运行无误。 12. **文档更新**:更新所有与数据库相关的文档,包括数据库设计、SQL脚本、配置文件等,确保团队成员都能...

    java程序读取数据库表 转为sql文件 仅供参考 不得宣传

    在Java编程环境中,读取数据库表并将其转换为SQL文件是一项常见的任务,特别是在数据迁移、备份或测试场景中。下面将详细介绍如何实现这个过程,并基于给出的标题和描述进行讲解。 1. **配置文件读取**: 首先,...

    java sql 课程设计 通讯管理系统

    10. **软件测试**:为了确保系统的功能正确无误,需要进行各种测试,包括单元测试、集成测试和系统测试,以检测潜在的bug和性能问题。 以上就是关于"Java SQL 课程设计 通信管理系统"所涉及的关键技术点,每个点都...

    java sql

    在IT行业中,Java SQL是Java编程语言与关系型数据库交互的核心技术。这篇博客"java sql"可能探讨了如何在Java应用程序中使用SQL语句来管理数据库。SQL(Structured Query Language)是用于创建、查询、更新和管理...

    JAVA性能测试工具

    JAVA性能测试工具是IT行业中用于评估和优化JAVA应用程序性能的关键组件。这些工具旨在模拟真实世界的负载情况,帮助开发者识别和解决性能瓶颈,确保应用程序在高负载下仍能保持稳定和高效运行。以下是对几种主要JAVA...

    一个简单JAVA+SQL的库存管理系统

    4. 测试与优化:进行功能测试,确保所有操作都能正确执行,同时优化性能,提升用户体验。 5. 部署与维护:将系统部署到服务器上,进行实际运行,并定期进行维护和更新,以适应业务变化。 四、总结 一个简单的Java...

    java项目应用中自定义sql在ibaits框架中的使用.docx

    【Java项目应用中自定义SQL在iBatis框架中的使用】 在Java开发中,使用Spring+iBatis框架,经常会遇到标准的SQL映射方法无法满足特定业务需求的情况。此时,就需要自定义SQL来实现功能扩展。本文将详细介绍如何在...

    Java +SQL做的项目代码

    Java,作为一种广泛使用的面向对象的编程语言,以其跨平台的特性、丰富的库支持以及强大的性能,常被用于开发各种类型的软件,包括Web应用、桌面应用以及后端服务。SQL(Structured Query Language)则是用于管理和...

Global site tag (gtag.js) - Google Analytics