MySQL之SQL优化
一 批量插入数据
使用load命令
(1)前提需要数据是有序的,否则耗时长。
load datat local infile '数据文件路劲' into table '表' fields terminated by ',' lines terminated by '\n';--字段间以逗号隔开,每行之间以换行符隔开
(2)关闭唯一性校验
在导入数据前执行SET UNIQUE_CHECKS=0,关闭唯一性校验,在导入后执行SET UNIQUE_CHECKS=1开启唯一性校验,可以提高导入效率。
(3)手动提交事务
在导入数据前执行SET AUTOCOMMIT=0关闭自动提交,导入结束后再SET AUTOCOMMIT=1开启事务,可以提高导入效率
二 优化insert语句
(1)同时插入多行数据,而不是分开插入,避免多次连接数据库
(2)手动开启事务
(3)数据有序插入,类似于批量插入,可以提高效率
三 优化order by语句
两种排序方式
(1)filesort排序方式:通过对返回数据进行排序,效率比较低
(2)using index排序:通过有序索引顺序扫描直接返回有序数据,不需要额外排序,效率较高。注意order by后面的字段顺序要和索引的列一致,多列排序最好是同为升序或降序,否则会变成filesort排序。
四 优化group by语句
group by实际涉及到排序
(1)可以加上order by null 让他只进行分组而不排序,去除filesort
(2)创建索引去除using temporary、
五 优化嵌套查询
使用join多表连接查询替换子查询
六 优化or条件
使用union替换or
七 优化分页查询
(1)使用索引,在将索引返回的数据用于多表连接查询获得所需数据,可以提高查询效率
(2)适用于主键自增,且不能出现断层,可以把limit查询的位置换成某个位置的查询
八 使用SQL提示
(1)USE INDEX(索引名)
在查询语句的后面加上use index提示数据库使用索引查询数据
(2)ignore index(索引名)
通过忽略索引来使用另外一个索引
(3)force index(索引名)
强制mysql使用特定的索引,这个用于给速度快于索引的全表扫描来指定索引