数据库优化常用方案

 

  

    数据库优化常用方案

从图中可以很明显的看出Mysql数据库优化的常用方法以及成本的高低。sql语句的优化和索引的优化是成本最小但是效果最好的方法,关于这两点我总结了如下几个优化方法:

1、sql语句中不使用子查询,比如delete from user where uid not in( select id from order),因为使用子查询数据库要在内存中建立临时表,消耗资源,如果两个表有关联并且经常被一块调用,最好是在一张表中建立另一张表的外键用join语句查询,比如:delete from user left join order on user.id=order.uid;
2、sql语句中最好不要出现"*"来代替已知字段,即使是要查询所有字段也要写出每一个字段,因为用*代替字段数据库要先查询出表中有哪些字段再进行sql语句的查询,无形中又多了一次无意义的查询工作;

3、合理建立索引

      3.1索引可以非常大程度加快数据库检索速度,尤其是在where和join中出现的列或者用Order by排序的时候速度更是快很多(需要判断或者比较或者排序的时候);

       3.2但是建立索引并不是越多越好,过多索引会造成冗余,因为每一次delete、update、add都会刷新一次索引,过多索引造成其他操作消耗过多资源,过小的表也没必要建立索引,没人见过两页的宣传单页还有目录的对吧。

第二重要的就是表结构优化,关于这方面也有以下几点简单总结

        1. 选择最合适的字段属性,使用可以存在数据的最小的数据类型,例如邮政编码,手机号码这类定长的数字可以用char(6),char(11);性别或者是否这种判断性文字可以用tinyint;字段属性尽量为not null这样不用判断是否为空,减少一个步骤(用其他方式表达你想表达的NULL,比如 -1);如果一定要用text这种类型,最好是采用分表存储;

        2.将常用信息和不常用信息分表存储,比如一个商城网站的用户表,用户的昵称,头像,密码,账号这类字段用户登录就会用到,而用户的兴趣爱好了,喜欢的颜色了这种字段就分表存储,相信大家京东账号中的个人信息可能也就在注册的时候打开过,以后就再没注意过了吧。