数据库优化方面的事情:
定位:查找,定位慢查询,
优化手段:
1:创建索引:创建合适的索引,我们就可以现在索引中查询,查询到以后直接找对应的记录。
2:分表:当一张表的数据比较多或者一张表的某些字段的值比较多并且很少使用时,采用水平和垂直分表来优化:
3:读写分离:当一台服务器不能满足需求时,采用读写分离的方式进行进群。
4:缓存:使用redis来进行缓存
5:一些常用的优化技巧
查找慢查询并定位慢查询?
在项目测试前,在启动mysql数据库时开启慢查询,并且把执行慢的语句写到日志中,在运行一定的时间后,
通过查看日志找到慢查询的语句
创建合适的索引
普通索引:允许重复的值出现
唯一索引:除了不能有重复的记录外,其他和普通索引一样(用户名,用户身份证,email.tell)
主键索引:是随着设定主键而创建的,也就是把某个列设为主键的时候,数据库就会给该列创建索引。
具体技巧:
1:对于创建的多列索引(复合索引),不是使用的第一部分就不会使用索引。
aler table dept add index my_ind(dname,loc) //dname左边的列,loc是右边的列
explain select * from dept where dname ='aaa' //会使用到索引
explain select * from dept where loc ='aaa' //不会使用到索引
2:对于使用like的查询,查询如果是‘%aaa’不会使用索引,而‘aaa%’会使用索引
explain select * from dept where dname like ='%aaa' //不会使用到索引
explain select * from dept where dname like ='aaa%' //会使用到索引
所以在like查询时,‘关键字’的最前面不能使用%或_这样的字符,
3:如果条件中有or,有条件没有使用索引,即使其中有条件带有索引也不会使用,换言之,就是要求使用的所有字段,都必须单独使用使用时能使用索引。
数据库优化之分表:
分表分为水平(按行)分表和垂直(按列)分表
根据经验:mysql表数据一般达到百万级别,查询效率会很低,很容易造成表锁: 按行数据进行分表:
如果某个字段值非常多,而且只有在很少情况下会查询,这个时候就可以把字段多的单独放到一张表,通过外键关联起来
水平分表策略:
1:按时间分表
2:按区间范围分表
3;hash分表
读写分离:当一台服务器不能满足需求时,采用读写分离的方式进行进群。
主从同步:
所有的写都往主上操作,而从只进行同步:
读写分离:
使用负载均衡,写往主,读往从:
如何插入百万条数据?
使用批量操作,批量操作不能使用代码操作就不使用!尽量使用存储过程来实现