1:插入数据优化
insert:建议批量插入、手动控制事务、主键顺序插入(防止页分裂))
大批量插入:开启参数local infile,执行sql:load data local infile '/Users/jun.zhao/code/load.sql' into table user fields terminated by ',' lines terminated by '\n';
2:主键优化
在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表
理解(页分裂,页合并)
3:order by优化
Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后再缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结构的排序都叫FileSort排序。
Using index:通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高。
4:group by优化
5:limit优化
一个常见又非常头疼的问题就是limit 2000000,10,此时需要MySql 排序为啥呢2000010记录,仅仅返回 2000000-2000010的记录,其他记录丢弃,查询排序的代价非常大。
优化思路:一般分页查询时,创建覆盖索引能够比较好的提高效率,可以通过覆盖索引加子查询形式进行优化。
select * from tb_user t,(select id from tb_user order by id limit 2000000,10) a where t.id=a.id
5:count优化
count 的几种用法
按照效率排序的话:count(字段)
6:update优化
update student set no='2000100100' where id=1;
update student set no='1000010000' where name='张三';
InnoDB的行锁是针对于索引加的锁,不是针对于记录加的锁,并且该索引不能失效,否则会从锁升级为表锁。所以应避免从行锁升级为表锁。