MySQL之SQL优化(高级)

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使用特定的索引,这个用于给速度快于索引的全表扫描来指定索引
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hcyxsh/article/details/114951723
今日推荐