MySQL查询性能优化——SQL优化(四)

 目录

1、批量插入数据

1.1 linux环境下

1.1.1 开启文件读取

1.1.2 load数据

1.2 windows环境下

2、order by优化

2.1 最左前缀

3、group by

3.1 最左前缀

4、count优化

5、or条件优化


  在上一期说到索引的使用,这期来聊一下SQL优化,也是平常写SQL的时候常用到的。

1、批量插入数据

在前几期也有聊到过批量插入数据的方法,例如insert ... select...,select ... into,数据量到达百万级时效率也会打折扣,此时可以使用MySQL提供的load指令插入。

1.1 linux环境下

 1.1.1 开启文件读取

首先查看mysql是否开启了支持读取本地文件:

show global variables like '%local_infile%';

图片

可以看到ON,说明默认开启了文件读取。

手动开启:set global local_infile=1;

1.1.2 load数据

load data local infile '要加载的文件路径' into table target_table。

target_table目标表结构需要与源文件格式一致。

1.2 windows环境下

windows下使用load指令加载可能会出现问题,源文件路径格式可能会存在问题,推荐使用可视化工具自带的导入功能,使用默认选项一路点击“下一步”到结束。

2、order by优化

先来看下当前表tb_user索引的情况:

图片

当前除了主键外没有任何索引,我们先来验证一下没有索引的情况:

explain select id,age from tb_user order by age;

explain select id,phone from tb_user order by phone;

图片

可以看到两条查询都没有用到索引。 

Extra:Using filesort:所有不是通过索引返回排序结果的都叫filesort排序。

2.1 最左前缀

给age和phone添加联合索引:

create index idx_age_phone on tb_user(age,phone);

图片

添加了联合索引后,只要查询覆盖索引且符合最左前缀原则,都不会回表。

explain select age,phone from tb_user group by age,phone;

图片

3、group by

3.1 最左前缀

使用group by也是要遵守最左前缀原则:

explain select age,phone from tb_user group by age,phone;

图片

4、count优化

按照效率排序,count(字段) < count(主键 id) < count(1) ≈ count()

所以尽量使用 count(*)

5、or条件优化

条件之间用到or,则两个条件都需要有索引。

explain select age,phone from tb_user where age='31' or phone='17799990023';

图片

推荐阅读:

    MySQL查询性能优化——索引的使用(三)

  • 28
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值