总结mysql优化方案

1.如果只是用来判断指定条件的数据是否存在,用select 1 from table where id = 1 比 select * from table where id = 1刚快.

2.小表驱动大表.查询用户id为1的大数据量订单时,可以用in,in和exists的区别,in里面先执行,然后再执行其他语句,可以在in里面是小表,exists是先执行左边,再执行右边,可以左边是小表.注意,in里面元素不宜过多.

3.批量添加的时候,for循环里面一个个添加效率低,和数据库连接开销大,最好执行批量添加,batchInsert,

insert into order(id,code,user_id) 
values(123,'001',100),(124,'002',100),(125,'003',101);

但是,这种插入和数量也是有线性关系,建议不超过500,如果超过的话,分批次操作.

4.合理使用limit,比如查询某人的第一次下单时间,不需要先查询出列表,然后再取第一个,可以直接sql后面加limit,或者查询单条数据的时候,防止有重复数据,也可以limit,

5.尽量用连接查询代替子查询,子查询会创建临时表,查询完成之后删除临时表,也会消耗资源.如果业务匹配,用inner join 替代left join .如果两张表使用inner join关联,mysql会自动选择两张表中的小表,去驱动大表,left join是用左边的表驱动右边的表,这里注意最好左边是小表.

6.选择创建索引时,选择离散度较高的列作为索引,id总比gender更适合做索引,区分度高.

select count(distinct id) / count(*) from user;

这个值越接近1越适合做索引

7.一个table中索引数量不宜过多,最好5个以内,不然创建数据的时候创建索引也会占用内存和空间,灵活创建索引,联合索引.

8.sql执行的时候要注意什么情况下没走索引.

        

9.合理选择字段类型.

  1. 能用数字类型,就不用字符串,因为字符的处理往往比数字要慢。

  2. 尽可能使用小的类型,比如:用bit存布尔值,用tinyint存枚举值等。

  3. 长度固定的字符串字段,用char类型。

  4. 长度可变的字符串字段,用varchar类型。

  5. 金额字段用decimal,避免精度丢失问题。

10.避免select * ,只查询你想要的字段.

11.不必严格符合数据库第三范式,可以创建一些冗余的字段,来避免多表查询.

12.灵活使用group by ,尽量缩小数据范围.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值