数据库的性能优化不仅仅是DBA的事情,我们程序员也是需要了解的。更何况不是每个公司都是有DBA的。这就需要我们程序员更多的注意。
现在的应用基本上都是关联到对数据库的操作,对于高并发的应用对数据库的应用就更为重要。数据库的优化主要包括数据库表的设计和sql的优化。
以下是学习和应用中的总结
数据库设计方面:
1、数据表字段类型能用数值型就用数字型,尽量不用字符型。
查询时比较数值比比较字符串效率高。占用的存储空间可能会更少。
比如:存放手机号码。手机号码都是11位,用字符型村需要11个字节而用无符号的整型只需要4个字节。
记录用户登录的ip地址。按照传统的字符串方式存放"192.168.1.1"需要15字节,ip地址是有32位二进制组成,转换成整数最大就4294967295,数据库有INET_ATON函数把ip地址转换成整数,INET_NTOA把数值转换成ip地址形式。
2、数据字段建立索引。
这个大家伙都知道索引可以有效的提高查询效率,但是索引也不是随便就建的,索引是需要维护的,过多的建立索引就增加了维护索引的成本性能反而会下降。我们只需要在经常用于查询条件的字段上建立索引即可。
sql优化方面:
1、尽量避免写select * 。
因为select * 会查询出所有的字段,查询的字段越多会降低效率。如果数据库服务器和客户端不在同一台电脑上还会有网络传输的问题。如果查询的表友几十个字段,而你只需要其中的几个字段,那其余的字段查出来就是一种浪费。我们应该需要哪些字段就查询哪些字段。
2、当只需要判断是否有需要的数据时需注意。
当我们只需要判断用户表中有没有四川的用户时:
mysql:select 1 from users where addr='四川' limit 1;
oracle:select 1 from users where addr='四川' and rownum<=1;
这里我们只需要知道是否有四川的用户,当我们查询到一条四川的用户的记录就说明有四川,就不需要继续向下查找。写成select 1 是因为我们不需要查询到用户的数据,只是占各位。
3、不要用null作为查询条件。
select id,name from user where addr is null,select id,name from user where addr is not null;
is null和is not null 会导致全表扫描。
待续。。。