【面试必问】mysql 数据库优化

前言:

面试的时候一般都会问到数据库方面问题,大部分都是会问到当数据库数据量太大的时候怎么处理访问请求速度呢,怎么做优化呢等等。下面我以个人见解来说下如何进行数据库优化

1.sql语句优化
在我们写sql语句查询时,注意少用join子查询,因为多表查询好资源,会加慢查询速度。其次尽量少用或者不用select * from table … 语句查询,避免全表扫描。当表内数据量小的时候速度还可以,当百万级别的数据让你去全表扫描时,那速度会慢死你,而且极其吃资源耗cup。还有就是不要使用临时表,临时表的操作不会写入日志文件;好处:提高了 临时表操作的速度;坏处: 数据一旦丢失,无法恢复。最后就是少用索引,尽量命中索引。索引说白了就是一种数据结构,他是存在磁盘中的,当索引建多了的话也是会占磁盘空间的。假如100w的数据表,总大小2G,索引文件就要占1 G 多。
2.加缓存
在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。缓存一般用 memcached,redis
3.读写分离”
数据库读写分离。将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步。注意主从库尽量不要部署在一个服务器上,因为如果某个模块服务器挂了,其他功能还是可以使用的,减少损失而且缓解了服务器压力。
4分库分表
如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统。
最后才是水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值