提高java和mysql代码性能和质量

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

0.if嵌套的层数最好不要超过3层

 

 
  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3.  
  4.  
  5. public class Qiantao {  
  6.       
  7.     /*  
  8.      * 嵌套太多层if,阅读性非常差,和看递归代码一样  
  9.      * @author yifangyou  
  10.      * @since 2011-08-16 09:35:00  
  11.      */ 
  12.     int example1(int a,String path,String account,String user){  
  13.         int result=0;  
  14.         if(account!=null){  
  15.             if(a==1){  
  16.                 if("/createAccount".equals(path)){  
  17.                     if(createAccount(account)){  
  18.                         result=1;  
  19.                     }else{  
  20.                         return -4;  
  21.                     }  
  22.                 }else if("/createUser".equals(path)){  
  23.                     if(isExistsAccount(account)){  
  24.                         if(createUser(account,user)){  
  25.                             result=2;  
  26.                         }else{  
  27.                             return -6;  
  28.                         }  
  29.                     }else{  
  30.                         return -5;  
  31.                     }  
  32.                 }else{  
  33.                     result=-3;  
  34.                 }  
  35.             }else{  
  36.                 result=-2;  
  37.             }  
  38.         }else{  
  39.             result=-1;  
  40.         }  
  41.           
  42.         return result;  
  43.     }  
  44.  
  45.     Map<String,Integer> paths=new HashMap<String,Integer>(){{  
  46.         this.put("/createAccount"1);  
  47.         this.put("/createUser"2);  
  48.     }};  
  49.       
  50.  
  51.     /*  
  52.      * 采用return减少嵌套层数,层次分明,便于修改,增加和删除判断比较容易  
  53.      * @author yifangyou  
  54.      * @since 2011-08-16 09:35:00  
  55.      */ 
  56.     int example2(int a,String path,String account,String user){  
  57.         if(account==null){  
  58.             return -1;  
  59.         }  
  60.           
  61.         if(a!=1){  
  62.             return -2;  
  63.         }  
  64.         Integer pathId=paths.get(path);  
  65.         if(pathId==null){  
  66.             return -3;  
  67.         }  
  68.         switch(pathId){  
  69.         case 1:  
  70.             if(!createAccount(account)){  
  71.                 return -4;  
  72.             }  
  73.             return 1;  
  74.         case 2:  
  75.             if(!isExistsAccount(account)){  
  76.                 return -5;  
  77.             }  
  78.             if(!createUser(account,user)){  
  79.                 return -6;  
  80.             }  
  81.             return 2;  
  82.         default:  
  83.             return 0;  
  84.         }  
  85.           
  86.     }  
  87.       
  88.     private boolean isExistsAccount(String account) {  
  89.         // TODO Auto-generated method stub  
  90.         return false;  
  91.     }  
  92.  
  93.     private boolean createUser(String account, String user) {  
  94.         // TODO Auto-generated method stub  
  95.         return false;  
  96.     }  
  97.  
  98.     private boolean createAccount(String account) {  
  99.         // TODO Auto-generated method stub  
  100.         return false;  
  101.     }  
  102. }  


  1.尽量重用数据库连接或者文件句柄
  2.过分的创建对象会消耗系统的大量内存,严重时,会导致内存泄漏,因此,保证过期的对象的及时回收具有重要意义。
    JVM的GC并非十分智能,因此建议在对象使用完毕后,手动设置成null。
  3.采用在需要的时候才开始创建的策略。
  4.array(数组)和ArrayList的使用。
    array 数组效率最高,但容量固定,无法动态改变,ArrayList容量可以动态增长,但牺牲了效率。 
  5.尽量使用基本数据类型代替对象。
  6.使用具体类比使用接口效率高,但结构弹性降低了
  7.读取配置文件内容,最好放在static变量里,不要用到时再解析配置文件
  8.避免在同一个类中动过调用函数或方法(get或set)来设置或调用变量
  9.输入和输出(I/O),避免多次读写同一个文件,读时最好尽量一次读取完需要的数据,写时,先把要写的内容全部放到变量里,一次写入文件
  10.数据库查询最好使用PrepStatement防止SQL注入,提高性能,prepStatement减少解析sql语句时间

 

 
  1. drop table IF EXISTS t1;  
  2.             create table t1(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));  
  3.             drop table IF EXISTS t2;  
  4.             create table t2(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));  
  5.             DROP PROCEDURE IF EXISTS test;  
  6.             DELIMITER ;;  
  7.             CREATE PROCEDURE test()  
  8.             BEGIN 
  9.                 truncate t1;  
  10.                 truncate t2;  
  11.                 set @start_time=UNIX_TIMESTAMP();  
  12.                 set @id=1;  
  13.                 SET @sql_str = "insert into t1 values(?,'a')";  
  14.                     PREPARE stmt FROM @sql_str;  
  15.                 REPEAT  
  16.                      EXECUTE stmt USING @id;  
  17.                      set @id=@id+1;  
  18.                 UNTIL @id>100000 END REPEAT;  
  19.                 DEALLOCATE PREPARE stmt;      
  20.                 select UNIX_TIMESTAMP()-@start_time as span;  
  21.                 set @start_time=UNIX_TIMESTAMP();  
  22.                 set @id=1;    
  23.                 REPEAT  
  24.                      insert into t2 values(@id,'a');  
  25.                      set @id=@id+1;  
  26.                 UNTIL @id>100000 END REPEAT;     
  27.                 select UNIX_TIMESTAMP()-@start_time as span;  
  28.             END;;  
  29.             DELIMITER ;  
  30.         call test(); 

11.能够在数据库里做的操作,尽量在数据库里做,因为数据是集合运算
12.带索引的inner join 比in效率高得多

 

 
  1. select count(*) from region;  
  2.            select count(*) from cidr;  
  3.            select SQL_NO_CACHE count(*) from cidr where region_id in(select id from region);  
  4.            select SQL_NO_CACHE count(*) from cidr inner join region on cidr.region_id=region.id; 

13.经常查询的字段加上索引,这个能够提高20倍
14. 当只要一行数据时使用 LIMIT 1,这样mysql查询到1条后可以马上返回结果;
15.避免 SELECT *,查询哪个字段就写哪个,这样可以减少查询时间和网络传输;
16. 拆分大的 DELETE 或 INSERT 语句
        如果你需要在一个在线的网站上去执行一个大的 DELETE 或 INSERT 查询,你需要非常小心,要避免你的操作让你的整个网站停止相应。
        因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了。
17.隐式提交

在事务执行过程中,执行下面语句相当于执行COMMIT

 

 
  1. ALTER FUNCTIONALTER PROCEDUREALTER TABLEBEGINCREATE DATABASECREATE FUNCTIONCREATE INDEXCREATE PROCEDURECREATE TABLEDROP DATABASEDROP FUNCTIONDROP INDEXDROP PROCEDUREDROP TABLELOAD MASTER DATA, LOCK TABLES, RENAME TABLESET AUTOCOMMIT=1, START TRANSACTIONTRUNCATE TABLE, UNLOCK TABLES. 

truncate 或者drop临时表会引起隐式提交

CREATE TEMPORARY TABLE 临时表不会引起隐式提交

delete from 临时表不会引起隐式提交

CREATE VIEW 会引起隐式提交

18.事务并行问题,按照谁先执行事务的顺序生效
     两个事务同时delete,update,insert操作同一行时,或者含有自增id时会引起挂起

 
  1. create table t(id int NOT NULL AUTO_INCREMENT,name varchar(10),PRIMARY KEY (`id`));    
  2. create table t(id int NOT NULL,name varchar(10));     
  3. --客户端A    
  4. SET AUTOCOMMIT =0;    
  5. insert into t values (1,'a');    
  6. --客户端 B    
  7. SET AUTOCOMMIT =0;    
  8. insert into t values (1,'b');                 
  9. ----------------------------------------  
  10. --客户端A    
  11. SET AUTOCOMMIT =0;    
  12. insert into t values (2,'a');    
  13. --客户端 B    
  14. SET AUTOCOMMIT =0;    
  15. delete from t where id=2;      
  16. --或者    
  17. update t set name='c' where id=2;                                   
  18. ----------------------------------------  
  19. --客户端A    
  20. SET AUTOCOMMIT =0;    
  21. delete from t where id=2;    
  22. --客户端 B    
  23. SET AUTOCOMMIT =0;    
  24. update t set name='c' where id=2;    
  25. --或者         
  26. delete from t where id=2;    

 


     本文转自yifangyou 51CTO博客,原文链接:http://blog.51cto.com/yifangyou/641248,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
349
分享
相关文章
Java异常处理:写出更健壮的代码
Java异常处理:写出更健壮的代码
快手小红书抖音留痕工具,自动留痕插件工具,java代码开源
这个框架包含三个核心模块:主操作类处理点赞评论、配置管理类和代理管理类。使用时需要配合
tiktok群控脚本,养号关注私信点赞脚本插件,java代码分享
这个代码模拟了一个社交机器人的基本行为模式,包括登录、关注、点赞、私信等操作。请注意
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
122 1
Java 期末考试救急必备涵盖绝大多数核心考点及五大类经典代码助你过关
本文为Java期末考试复习指南,涵盖基础语法、面向对象编程、异常处理、文件操作、数据库连接五大核心考点,提供详细解析与实用代码示例,助力快速掌握重点,高效备考,轻松应对考试。
36 0
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
153 0
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
Java 面试资料中相关代码使用方法与组件封装方法解析
这是一份详尽的Java面试资料代码指南,涵盖使用方法与组件封装技巧。内容包括环境准备(JDK 8+、Maven/Gradle)、核心类示例(问题管理、学习进度跟踪)、Web应用部署(Spring Boot、前端框架)、单元测试及API封装。通过问题库管理、数据访问组件、学习进度服务和REST接口等模块化设计,帮助开发者高效组织与复用功能,同时支持扩展如用户认证、AI推荐等功能。适用于Java核心技术学习与面试备考,提升编程与设计能力。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
77 6
Java 面试资料中相关代码使用方法与组件封装方法解析

推荐镜像

更多
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等