MySQL的SQL语句优化和索引设计

MySQL的SQL语句优化和索引设计

前言

先稍微讲述下面会出现的名词:

  • 联合索引:多个字段组合创建的索引
  • 覆盖索引:使查询的字段和条件字段都出现在同一个索引中,就可以避免要还去另一个索引中寻找
  • 最左前缀法则:这个要自己先去看索引的详细内容,这边讲不完。

1.插入优化:

  • 多条数据时建议批量插入

  • 设置手动提交事务
    以上都是为了避免频繁地开启关闭事务降低效率

  • 按主键顺序插入 避免页分裂,涉及到InnoDB的存储结构

2.主键优化

  • 主键长度尽可能短
  • 主键尽量自增,避免使用身份证号等无序字段成为主键
    同样是为了避免页分裂

3.order by 优化

  • 使用覆盖索引
    一般是where后的条件和order by后的条件建立联合索引,遵循最左前缀法则。条件允许则连同查询的字段也一同建立联合索引,避免回表查询

  • 建立索引时根据排序条件的升序降序创建
    创建索引时可指定索引的排序顺序

create index 索引名 on 表名(字段名 ascdesc) #默认是asc升序

4.group by优化

  • 类似order by 优化,同样是建立联合索引,尽量覆盖索引

5.limit 优化

  • 使用覆盖索引加子查询的方式
    先通过子查询查出主键,再通过联合查询的方式找出主键对应的信息。就是将子查询的结果当作一张新表再联合查询,然后根据联合查询建立联合索引,依旧是尽量覆盖索引,避免回表查询

6.count优化

效率排序:

  • count() = count(1) > count(主键) > count(字段)
    **innoDB引擎对count(
    )做了优化,所以尽量使用它**

7.update优化

  • 更新的条件要有索引
    innoDB事务中使用的行锁是针对索引的,如果没有索引或者索引失效会导致行锁升级为表锁,当该事务未提交前,其它事务都无法对该表进行操作,会极大降低并发能力

索引的设计原则

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfhua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值