数据库的优化方案(这是自己整理的,如有错误请大家指出,谢谢!)
1.大量数据的插入
可以从一下几方面改善效率:
1.针对表结构进行改善
如果是经常插入,创建的表应该采用Innodb引擎,相反,查询居多的话,应该选择Myisam引擎,但是这里请注意Myisam引擎是无法开启事务的。(他俩区别很多,这里只谈关于插入和查询区别,其他的可以去查)。实际情况,还是采用Innodb的居多。
2.针对自己写的插入sql语句进行改善,具体效果如下图
假设有个user表,里面有id,name, age,score这四种属性,其中id自动增长,现在对表插入大量的user信息。
其中一种方法实现方式是这种
insert into user(name,age,score) values('wanghan1', 23, 80);
insert into user(name,age,score) values('wanghan2', 24, 90);//依此执行两条sql语句
另外一种方式采用如下
insert into user(name,age,score) values('wanghan1', 23, 80),('wanghan2', 24, 90);
//这样执行,两种结果是一样,但是运行的时间下面一种插入方式比上面方式快不少。下面是针对插入个数不同,执行时间的收集。
自己可以明显感觉到
3.使用事务,提高插入效率
提高效率的原因很简单,因为对Mysql进行插入的时候,mysql内部会建立一个事务,只有处于事务内才能进行真正的插入操作。通过使用事务减少了每次创建事务的消耗,实际上所有没有开启事务的插入都是在执行后才进行commit操作。下面是事务开启和不开启的执行时间图
4.关于第四点优化,对插入的数据的主键数据进行排序然后进行插入(其实具体看项目实际情况,这里还是记录一下,以免后来用),话不多说实际执行效果如下图
这里很明显看到时间相差无几,后面会有说明
其实对于第二,三,四的优化当时有综合性能测试,效果如下图
可以看出排不排序的区别
2.大量数据的查询
1.最简单的一种方法就是建立索引,如忘记了sql语句的,在这提一下create index user_index onuser(name,score)
这条语句指的是帮user表里的name和score属性建立索引,也可用 alter table user add indexname_index(name) 其实索引有三种,主键索引,唯一索引,普通索引,一个表里面只能有一个主键索引,最好之多6个索引
2.优化查询性能
具体方法可以用EXPLAIN 后面接你的select语句,来分析索引的添加,具体的可以查EXPLAIN语句,这里就略过
3.从侧面上提高效率,调整内部变量
改变索引缓冲区(key_buffer) 改变表长(read_buffer_size)设定打开表的数目的最大值(table_cache)
上面只提三个,大部分都是提高缓存的大小来控制效率
暂时只写到这三种,以后在遇到别的,在补上