mysql优化技巧

这边总结一下mysql在使用过程中比较常见的优化小技巧,比较不好理解的都加了小例子

1、当使用索引列进行查询的时候尽量不要使用表达式,可以把计算放在业务层,而不是数据库层

错误例:

select actor_id from actor where actor_id+1=5;

2、尽量使用主键查询,而不是其他索引,因为主键查询不会触发回表查询

3、使用前缀索引

字段长度比较长的时候,截取部分识别度高的部分当索引

想要详细了解的可以看我文章mysql前缀索引--带案例分析

4、使用索引扫描来排序

5、union all、in、or都能够使用索引,推荐使用in

6、范围列可以用到索引

范围条件是:<、<=、>、>=、between

范围列可以用到索引,但范围列后面的列无法用到索引,索引最多用于一个范围列

7、强制类型转换会导致全表扫描

例如user表中的phone是varchar类型的

explain select * from user where phone=13800001234;不会触发索引

explain select * from user where phone=‘13800001234‘;加入引号之后触发索引

8、更新十分频繁、数据区分度不高的字段不宜建立索引

更新会变更B+树,更新频繁的字段建立索引会大大降低数据库的性能(叶子节点插数据,合并分裂会导致n多的io)

区分不大的属性,例如性别,建立索引没有什么意义,不能够有效的过滤数据,一般区分度要在80%以上的列才适合建立索引

区分度计算:count(distinct(列名))/count(*)

9、创建索引的列,不允许为null,可能会得到不符合预期的结果。业务中不能为null的字段

10、当需要进行表连接的时候,最好不要超过三张表,因为需要join的字段,数据类型必须一致(最好是索引列)

11、能使用limit尽量使用limit,避免过多无效扫描

12、单表索引建议控制在五个以内,索引会占用内存空间

13、单索引字段不允许超过五个(组合索引,最左匹配原则)

14、创建索引的时候避免以下错误概念

索引越多越好,索引多了占内存

过早优化,要在熟悉业务之后再优化

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值