SQL优化

insert优化:{
           批量插入
           手动提交事务(多条insert语句一起提交)
           主键顺序插入
         }
大批量数据插入使用load指令进行插入
客户端连接服务端时,加上参数 --local-infile
mysql --local-localinfile -u root -p;
设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile=1;
执行load指令将准备好的数据,加载到表结构中
load data local infile '/root/shuju' into table 表名  fields terminated by ',' lines terminated by '\
n';
 

主键优化:
1。满足业务需求的情况下,尽量降低主键的长度。(二级索引的叶子节点存着主键,降低主键的长度,可以降低二级索引占用的磁盘空间,降低搜索时候的磁盘IO)
2.插入数据时,尽量选择顺序插入(避免页分裂),使用auto_increment自增主键(此时explain的type为const)
3.尽量不要使用uuid做主键或其他自然主键 

order by优化
Using filesort和Using index
区别:前者需要在排序缓冲区完成排序操作,后者通过有序索引扫描直接返回有序顺序,操作效率更高
比如查询age字段在不建立索引的时候进行order by排序是Using filesort,而建立索引之后是Using index,因为age字段变得有序(这里需要明确索引是什么,索引是帮助数据库高效获取数据的数据结构)(个人的理解:比如对age字段的排序,age本身已经建立有单列索引,那么age本身就是顺序的排列,他会通过索引直接返回有序数据,因此不需要在缓冲区进行排序操作)

联合索引的说明:比如给age和phone建立idx_user_age_phone联合索引
情况一:按age的升序和phone的升序进行排列(order by age and phone)
这种情况下是using index,此时的索引的顺序是先age,age相等则比较phone,可以理解为此时排序的顺序与索引的排序顺序一致
情况二:按age的降序和phone的降序进行排列(order by age desc and phone desc)
这种情况下是using index和backward index(反向排序),可以理解为此时排序的顺序与索引的排序顺序相反
情况三:按phone的升序和age的升序进行排列(order by phone and age)
这种情况下是using index和using filesort,此时违背最左前缀法则,此时出现using filesort
情况四:按age的升序和phone的降序进行排列(order by age  and phone desc),这种情况下是using index和using filesort,此时创建一个age和phone的desc的索引就能解决掉using filesort,create index idx_age_phone_ad on tb_user(age phone desc);
 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值