代码性能规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 SQL书写规范及性能优化
1. 提高语句共享性,抽象中公用方法静态页面代码和后台业务类代码行数控制2000行内
2. SQL语句便写完开发人员必须在PL/SQL上验证执行效率,执行时间过长的语句禁止写入程序代码中
3. 项目中sql全部大写,避免重编译
4. 不需要排序的时候尽量避免使用隐含排序:distinct、union
5. 如果不需要排重或者两者根本就没有交集,那么用unionall代替union
6. 选择条数最少的表做为连接查询的基表,三表交叉时,选择中间表作为基表
7. 能过滤掉最大条数的条件放在最后面
8. 针对线损系统中的运行数据禁止使用select*
9. 一个可以通过连接查询实现的尽量不要拆分成多个sql分步执行
10. 用where或者having都能实现的,用where代替having
11. 在嵌套子查询的时候用exist代替in
12. 在用in查询的语句中,如果in的范围不确定或者确定超过1000就不能使用in
13. 通过表连接或者exist都能实现的,用表连接代替exist
14. 查询时按照数据库表字段原有类型查询(数字转为char查询)
15. 嵌套子查询尽量不要超过3层
16. 大型表避免not equals的查询
17. 大型表避免使用null作为查询条件
18. 大型表like模糊查询时避免%在模糊条件的最前面
19. 用exist或者distinct都能实现的优先考虑使用exist
1.2 索引与性能优化
1. 选择可选性最高的字段创建索引
2. 不要轻易在字段前面增加函数或者将字段嵌入到表达式中,导致索引无法使用
3. 尽量少使用函数索引
4. 约束条件字段比较固定,则优先考虑使用复合索引
5. 复合索引的前缀性,即sql语句中,只有将复合索引的第一个字段作为约束条件,该复合索引才会启用。
6. 按可选性高低进行复合索引字段的排序,
7. 如果条件设计的字段不固定,组合比较灵活,则分别为各个字段建立索引
8. 尽量通过被驱动表的链接字段上的索引,访问被驱动表
9. 如果被驱动表中还有其他限制性条件,可以创建复合索引
10. 索引是从数据库中获取数据的高效方式之一,很多数据库性能问题都可以采用索引技术得到解决。
11. 使用索引可以缩短查询语句的执行时间,提高系统的执行效率,但是要避免过度索引的情况出现,尽量控制一个表的索引数量小于五个。
12. 不要创建实际用不上的索引,如果索引不能提高任何应用中的查询速度或者索引没有被应用使用,则要把它删除。
13. 主键索引在创建的时候一定要明确指定其名称,不能让系统默认建立主键索引。
14. 不要在有很多字符的大型字段上创建索引,这样的索引会占用过多的存储空间。
15. 记录数少的表保留有主键索引即可,不必再去创建其它索引,即使对该表进行全表扫描,效率也很高。
16. 当创建索引耗时过长时,可以考虑并行创建索引。
17. 考虑创建具有NOLOGGING的索引。
18. 在两个或更多的字段上创建的索引被称作复合索引。复合索引的第一字段称为前导字段(Leading Column)。建议复合索引按字段可选性(值的多少)的由高到低进行排列,因为字段值可选性越强,定位的记录也就越少,查询效率会越高。
19. 经常被查询的字段应作为复合索引的前导字段,例如对一个字段多次执行查询,则该字段应该是复合索引中的前导字段。
20. 如果对复合索引中的字段多次执行单独的查询时,应为该字段创建单独的索引。2 程序编写优化策略
2.1 内存管理优化
1. 要在对象使用完后进行了及时释放
2. 不要使用finalize 函数回收资源
3. 程序中数组类型是否显式申请空间,申请空间是否合理;
4. 要对共享变量设置为静态变量
5. 要采用了对象池技术来避免频繁的垃圾回收
6. 避免提前创建对象
7. 内存参数调优
2.2 程序表达式优化
1. 对不可覆盖的方法或不可继承的类加final
2. 高并发时采用线程同步
3. 不要采用循环进行数组拷贝
4. 避免在循环内调用方法
5. 在循环体内不要创建了对象
6. 多重循环中,复杂逻辑的循环在外,简单逻辑循环在内
7. 不要在循环体内使用了try/catch
8. 不要在循环中使用了length()
2.3 Java核心类性能优化
1. ArrayList显式申请空间时需进行优化
2. 合理使用了String 类,字符串相加、串联时要采用StringBuffer
3. 合理使用了toCharArray()
4. 合理的把字符串转换为数字
2.4 系统I/O类优化
1. 使用了系统缓冲流
2. 使用了压缩流提高系统性能
3. 数据格式化优化
4. 获取文件信息优化
2.5 类与接口优化
1. 避免在构造器中初始化其他的类
2. 不要给构造器添加返回值
3. 避免在构造器中对静态变量赋值
4. 不要在构造器中创建类实例
2.6 JSP与servlet性能优化
1. 优化jspInit()
2. 采用out对象中的print()方法代替println()方法
3. 采用ServletOutputStream 对象代替JSPWriter
4. 采用适当的值初始化out对象缓冲区的大小