数据库优化个人心得

随着公司业务越来越大,暴露的问题越来越多,主要是数据库压力太大
前期追求快速实现业务,忽略了性能的考虑
特写一些历史教训

系统设计之初,从三个角度出发:产品、架构、数据库设计:

  • 产品角度
    直接pass掉不合理的需求,挖掘真正的需求,优化需求
  • 架构设计
    走缓存,读写分离,异步,服务拆分
  • 数据库角度
    建索引,分库、分表

建表意见:

 1、一定要有自增id,而且必须是primary key
   自增id会影响读和写的效率
   详细原因转载[mysql自增id对于效率非常重要](https://www.jb51.net/article/161312.htm)
 2、关联表,不管是父子表还是大表小表,一定用主键id关联,联表查询一定用id
 3、最好不要在数据库上建外键约束,而是在代码层面去约束

查询优化:

 1、inner join 联表用join,禁止用where 条件联表,因为where联表要先做笛卡尔积再计算,浪费内存浪费时间
 2、多表联查(超过三个表),分开查
 3、索引优化
 4、count(*)占内存,不要时时刻刻做count(*),可以做个短时间缓存,或者读写分离
 5、对于特殊sql,用explain看用的索引是否合理,如果索引使用不合理,
    可以强制显示使用合理的索引,非常有用。
    如果order by的字段没有在where条件里,是不会走索引的,所以可以尝试显示指定使用索引,这种情况需要在实际场景下验证

运维要做的事情:

 1、不同的业务连接数据库,分用户,方便定位问题
 2、一定要定期分析慢查询
 3、清理碎片

优化参数
慢查询定期分析—目的是优化sql,一定要在开始打好基础,事情不难,最怕忽略这件事,拖到最后,业务复杂,不好优化

nginx访问日志定期分析

  • 特殊sql

distinct 和order by一起使用会建立临时表,建立临时表会花费时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值