浅谈数据库优化(以mysql为例)

数据库优化遵循一个漏斗法则,如下图:

数据库优化的漏斗法则基本可分为5个层次:

  1. 减少数据访问(减少磁盘访问)
    • 索引,减少全表扫描
  2. 返回更少数据(减少网络传输或磁盘访问)
    • 根据实际业务需求返回所需数据
  3. 减少交互次数(减少网络传输)
    • 缓存
    • 存储过程
    • 批量查询
  4. 减少服务器CPU开销(减少CPU几内存开销)
    • 批量处理
    • 在客户端处理大量负责运算
  5. 利用更多资源(增加资源)
    • 硬件资源

针对上图我们研究了一个优化的方向:

 PS:说一下实际开发中,基本就是sql优化,最多也就是数据库表结构优化(分库分表)

浅谈一下sql优化的思想:

首先当我们的sql语句执行时间达到了3s以上时,是无法接受的,通常都是毫秒级别的响应,我们需要先开启mysql数据库的慢查询日志(需要在mysql的配置文件中进行配置),定位到执行慢的sql语句后,我们针对这条语句使用explain关键字查看它的执行计划,分析一下是不是索引失效导致了全盘扫描。

这里列举下常见的索引失效的情况:

 

再浅谈一下数据库表结构优化(也就是分库分表):

常见的拆分有水平拆分和垂直拆分,但是最多用到水平拆分,我目前没有接触过垂直拆分的情况,下面说一下水平拆分,比如一张订单表,每天都会有大量的数据插入,假设现在有一张表中的数据达到了1000万(理论上mysql单表大于500万条数据, 就需要考虑水平分表, 因为单表数据量越大查询越慢, 查询效率成指数级下降 ),我们将这张表水平拆分,那么就会有个问题就是如何知道自己要去哪一个库中去查数据。

我们使用hash分表的思想(前提需要保证主键为数字),假设将两张表分为100个hash槽,上表为0~49,下表为50~99,假设传入的id为50时,用50/100取余数为50,那么就到下表中去查。

我们也可以可以使用三方的插件,比如mycat,它只不过是帮我们集成了hash分表的思想。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值