1. 采用绑定变量的方式。

       绑定变量是解决动态语句硬解析的利器。如果sql执行频度较高,但处理的数据量较少,结果集也相对较小,sql语句的解析时间也会接近或高于执行时间,此时就应该采用绑定变量的方式,这样就能减少sql语句编译时间,提高sql语句执行效率。

 

2. 在where字句中尽量采用like来匹配,而不用字符串截取函数substr。

      在使用like的时候,应尽量使用右匹配(a%),而不使用全匹配(%a%)和左匹配(%a),使用右匹配可以提供较多的数据降低查询开销。

 

3. select字句中只取所需要的字段。

      每个不需要的列的都会消耗一定的性能。

 

4. 避免不必要的数据格式转换。

     4.1 主外键的数据类型一定要一致,避免在join连接查询时产生数据类型转换,消耗性能。

     4.2 如果需要数据类型转换,尽量在程序中完成。

     4.3 对于较短的列,尽量使用字符类型,而不是可变字符类型;尽量使用整数,而不是浮点数;尽量使用日期,而不是字符;尽量使用数字,而不是字符。

 

5. 尽量不用视图。

 

6. 如果需要插入或更新大批量数据,尽量使用批处理。

      如果是一条一条执行,则性能低下,应该采用批处理,但是批处理也要控制数量,如果数量太大,可能会造成数据库锁表。

 

7. 避免在sql语句上进行计算。

 

8. 不要在in语句里放太多的值。

      通过IN语句可以减少sql的调用次数,但是如果IN语句里的值的个数过多的话,会导致执行计划的不稳定和sql性能下降。一般IN语句里的个数在20个以下性能较好,20个以上100个以下性能不变,超过100个则性能可能会下降。

 

9. 在查询范围时尽量使用闭区间。

 

10. 不能用包含null值的列做索引。

       任何包含null值的列都不会被包含在索引中。即使索引有多列,但只要有一列包含null值,该列就会从索引中删除,也就是说如果某一列存在null值,即使对该列建索引,也不会提高查询效率。

 

11. 尽量避免使用嵌套查询。

       嵌套的层次越深,效率越低。可以采用的办法是,将子查询单独提出来,分多步完成。如果子查询无法避免,应尽量在子查询中过滤掉尽可能多的行。或者考虑进行连接查询。

 

12. 尽量避免使用distinct关键字。

        使用distinct是为了保证在查询结果集中不出现重复行,但是distinct会产生一张工作表,并进行排序来删除重复,这会大大增加查询和I/O的次数。

 

13. 避免在order by字句中使用表达式。

       避免对3个以上的字段进行排序。      

 

14. 索引的使用。

      合理的使用索引。