数据库优化

来源:互联网 发布:java的基础知识 编辑:程序博客网 时间:2024/06/08 04:46

1  PrepareStatement代替statement,因为PrepareStatement会提前编译,并能防止注入攻击

不在WHERE字句中使用NULL的判断,尽可能使用NOTNULL来填充数据,使用NULL的话将会使数据库放弃使用索引而进行全表扫描

WHERE中避免使用OR,如果一个字段有索引而另一个字段没有,那么数据库引擎将会放弃使用索引而进行全表扫描,OR可以使用UNIONALL来代替,比如:

                   SELECTNAME FROM TABLE WHERE num=10 OR NAME=‘张’

                   最好写成:

                   SELECTNAME FROM TABLE WHERE num=10

                   UNIONALL

                   SELECTNAME FROM TABLE WHERE NAME=‘张’

避免在WHERE字句中进行字段的表达式操作,这样将会引发全表扫描

                   SELECTNAME FROM TABLE WHERE NUM/2 = 100

                   改为

                   SELECTNAME FROM TABLE WHERE NUM = 100*2       

5 SELECT * FROM TABLE 这样的全表扫描是没有意义的

索引并不是越多越好,索引会引起UpdateINSERT的效率

选择最有效的表明顺序

FROM字句SQL解析器按照从右往左的顺序解析FROM字句中的表名,所以在含多个表的时候必须选择记录条数最少的表作为基础表(放在最后的表),SQL在处理表的时候会排序并合并他们,首先扫描最后一个表并对记录进行排序,然后扫描倒数第二个表,最后将第二个表的记录和第一个表中的合适的记录进行合并

索引

         如果有3个以上的表进行连接查询,那么用交叉表(被其他表引用的表)作为基础表

     8 WHERE字句的连接顺序

SQL采用自下而上的顺序解析SQL语句,因此表之间的连接要写在其他条件之前,并且能过滤掉大量数据的条件要写在最末尾

         9  TRUNCATE代替DELETE

         10  WHERE字句替换HAVING,能不用having那就尽量不要用having,因为having字句在检索出所有记录之后才会对结果集进行过滤,这个过滤包括排序、总计等等的工作,

但是如果能用where限制记录的条数,那么将大大减少这方面的开销

         11  使用表的别名,因为可以减少甚至避免列歧义而引发的错误,减少解析时间

         12  使用EXISTS代替IN

1 0
原创粉丝点击