MySQL优化----非查询SQL优化
一、概述
首先,对于查询语句,采取的优化方式是添加索引,采用explain来查看执行性能和索引使用情况。而对于其他类型的sql语句,则有不同的方式。
插入优化:
1.首先,插入数据时尽量多条数据一同插入,这样可以减少网络开销,但是也不能太多,太多又会造成数据库服务器阻塞,一般不超过1000条数据。
2.在插入时尽量手动提交事务,在自动提交的情况下,每执行一个insert语句都会视为一个事务,采用手动提交的方式,可以将多个语句放到一个事务中,减少了系统的性能开销。
3.在插入时尽量按照主键顺序插入。
4.在大量插入时,使用load命令。load命令的使用格式如下:
假如有一个text文件或者其他文件,里面有大量数据:
注意的是,在MySQL8.0以后,开启了secure_file_priv,在使用时需要将文件放到指定的目录下才行,使用 show variables like ‘secure_file_priv’来查看MySQL指定的安全目录。
之后,使用 load data infile ‘文件的地址’ into table 表名 fields terminated ‘文件数据之间分割的符号,比如‘,’’ lines terminated ‘数据行之间的分割符,如‘\n’’ ignor n lines(忽略前n行)( first_name, last_name, email, hire_date, salary );(列映射)
主键优化:
1.在满足业务要求的情况下,尽量使用更短的主键。
2.尽量顺序插入,否则在主键插入时发生页分裂,造成资源浪费。
3.尽量使用auto_increment主键。
4.在业务中尽量不去动主键。
Order By优化:
1.根据排序字段建立合适的索引,多字段排序时,要遵循最左前缀法则。
2.尽量使用覆盖索引。
3.多字段排序时,要注意升序降序。
4.大量数据排序时,若不可避免使用filesort时,可以手动增大sort_buffer_size来增大缓冲区。
Group By优化:
1.在分组操作时,可以通过索引来优化效率。
2.在分组操作时,索引的使用也是满足最左前缀法则的。
Limit优化:
在limit中,最常见的问题是limit 2000000,10。这时候数据库需要加载前2000010条数据,但是我们只需要2000000-2000010,前面的数据是无效加载。
优化思路:可以通过覆盖索引加子查询的方式来优化:
假如创建了一个tab_name_no的索引:
select s.name,s.no from table s ,(select id from table a limit 2000000,10) where s.id = a.id;
这样的话,前2000000数据就只加载了id,减少了性能损耗。
count优化:
按照效率排名,count(字段)<count(主键Id)<count(1) 近似于count(*),所以使用时尽量使用count(*)。
updata优化:
在进行更新时,一定要使用有索引的列,负责MySQL的行锁会升级为表锁。