首页 > 数据库 > SQL Server >

SQL数据库优化

2017-04-17

SQL数据库优化。1 【强制】不要在foreach循环里进行元素的remove add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。

SQL数据库优化。

1.【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。

2.【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。

3.【强制】Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。

4.【强制】long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。

5.【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。

6.【强制】使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。

7.【强制】高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。

8.【强制】对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。

9.【强制】并发修改同一记录时,避免更新丢失,要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用version作为更新依据。

10.【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。

11.【强制】后台输送给页面的变量必须加$!{var}——中间的感叹号。

12.【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

13.【强制】避免重复打印日志,浪费磁盘空间,务必在log4j.xml中设置additivity=false。

14.【强制】 超过三个表禁止join。需要join的字段,数据类型保持绝对一致;多表关联查询时,保证被关联的字段需要有索引。

15.【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)就是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。

16.【强制】count(distinct col) 计算该列除NULL之外的不重复数量。注意 count(distinct col1, col2) 如果其中一列全为NULL,那么即使另一列有不同的值,也返回为0。

17.【强制】当某一列的值全是NULL时,count(col)的返回结果为0,但sum(col)的返回结果为NULL,因此使用sum()时需注意NPE问题。

18.【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

19.【强制】数据订正时,删除和修改记录时,要先select,避免出现误删除,确认无误才能执行更新语句。

20.【强制】用户请求传入的任何参数必须做有效性验证。

21.【强制】不要捕获Java类库中定义的继承自RuntimeException的运行时异常类。

【推荐】防止NPE,是程序员的基本修养,注意NPE产生的场景:

1) 返回类型为包装数据类型,有可能是null,返回int值时注意判空。 反例:public int f(){ return Integer对象}; 如果为null,自动解箱抛NPE。

2) 数据库的查询结果可能为null。

3) 集合里的元素即使isNotEmpty,取出的数据元素也可能为null。

4) 远程调用返回对象,一律要求进行NPE判断。

5) 对于Session中获取的数据,建议NPE检查,避免空指针。

6) 级联调用obj.getA().getB().getC();一连串调用,易产生NPE。

相关文章
最新文章
热点推荐