Mysql的一些优化
记录一些对数据库操作及一些优化措施,结合截图来验证
1.
小结1:对经常使用的字段,添加索引.但是也不宜过多,会占用磁盘空间并会降低写操作的性能.
============================================================================
2.
小结2:尽量减少全表扫描的操作,通过explain获取type类型,进行优化. select_type:ALL,index,range ,ref ,eq_ref,const,system null从左到右越来越好
============================================================================
3.
小结3:.text和blob的值会引起性能问题,特别是在执行大量删除操作时,会在表中留下大量的”空洞”,以后在插入的性能上会有影响,建议定期执行optimize table功能,对这类表进行碎片整理
============================================================================
4.load优化
4.1MYISAM表
alter table aaadisable keys;
load data infile'/home/aaa.txt' into table aaa;
4.2InnoDB表
1.存储前添加主键
load data infile'/home/aa.txt' into table aa;
2.在导入数据前执行关闭唯一性校验
setunique_checks=0 #关闭唯一性校验
setunique_checks=1 #导完后恢复唯一性校验
3.关闭自动提交的方式
set autocommit=0
setautocommit=1 #完成后恢复自动导入
============================================================================
5.insert
批量插入,会快很多
insert into test values(1,2),(3,4),(5,6);
尽可能用load data infile代替insert会快20倍
============================================================================
6.order by
1.尽量使用索引排序,显示USING index
2.如果不是索引排序,显示USINGFILESORT(适当修改max_length_for_sort_data的值,适当加大sort_buffer_size排序区尽量让排序再内存中完成)
============================================================================
7.group by
如果不需要分组默认排序(查询变化不明显,稍稍优化)
select * from test group by key,value order by null
============================================================================
8.一般情况效率Join>子查询
============================================================================
9.or
or之间的每个条件列都须用到索引,如果没有索引则考虑增加
============================================================================
10.分区
MySQL分区优点:
1.存储更多的数据
2.优化查询,where子句包含分区
3.多个磁盘分散查询,以获得更大的查询吞吐量
4.删除分区删除数据