常用数据库优化

yn6e 9年前

    数据库优化自然是我们经常需要注意的地方,尤其使用mybatis的人知道,XML中sql一目了然,一旦你的sql写的不够超前,就会受到别人的指点,说这个可以这样改改,那个可以那样改改。起初,对于老程序员的指指点点本人总是不以为然,后面渐渐就发现,有些基础东西我们必须去学会、去运用。

    数据库的优化自然是一个很深奥的东西,尤其是Oracle。这里就不讨论那些深奥有难懂的东西了,本人使用Sqlserver 、PostgreSQL 、MySQL 等,所以,这些关系型数据库的优化大多是差不多了,这里指给出最常见,最基础的东西;


  第一类问题:查询语句中尽量减少全表扫描

查询缓慢很多都是因为语句执行时引擎放弃索引搜索而直接采用了全表扫描,具体如下:

1、where 条件 以及 order by 涉及的列应该为该列建立索引

2、where 条件中避免对字段进行null判断,所以建议为字段设置默认值

3、where 条件中避免使用or,建议使用union all 替代 or

4、where 条件中避免使用 in not in ,本周就是or,建议使用exist 代替

5、where 条件中避免使用 like ‘%some%’,模糊查询或者使用like都会全表检索

6、where 条件中避免运算或函数操作,应该把运算放在关系条件的右边,等待预编译计算

7、where 条件中避免使用1=1,尽管这样处理在代码中是非常灵活的

8、count(*)应该改成count(1)

    第二类问题:其他优化,以及个人建议

9、varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,其次对于查询来说,在一个相对较小的字段内搜索效率要高些。

10、delete insert update 都会进行锁表,所以对于经常进行查询的关系,应该尽量把经常操作的字段和经常查询的字段进行分离成两个关系分别存储

11、尽量少使用select *,没用的字段不需要返回