mysql优化

数据库分库分表

水平切分:将同一个表数据分块保存到不同的数据库

1、产品表(数据量10w,稳定)

2、订单表(数据量200W,且有增长趋势)

3、用户表(数据量100w,且有增长趋势)

1、将用户表分成男用户表和女用户表

2、订单表通过已完成和完成中拆分为已完成订单和未完成订单

3、商品表未完成订单放一个server上,已完成订单表和男用户表放一个server上,女用户表放一个server上(女的爱购物,数据增量大)

解决问题:单表中数据量增长出现的压力

不解决的问题:表与表之间的io竞争

垂直切分:就是按功能模块拆分,比如分为订单库,商品库,用户库。垂直切分最大的特点就是简单明了,实施方便。

1、把产品表和用户表放到一个server上,订单表单独放到一个server上

解决问题:表与表之间的io竞争

不解决的问题:但表中数据量增长出现的压力

带来问题:

事务问题

1、分布式事务

2、程序和数据库同步控制

跨点join问题

 避免join操作,将操作分成多步完成。在第一次查询的结果集中找出关联数据的id,根据这些id发起第二次请求得到关联数据。

跨节点的count,order by ,group by以及聚合函数的问题

    解决方案:与解决跨节点join问题的类似,分别在各个节点上得到结果后在应用程序端进行合并。

sql优化

1、where 避免使用!=或<> 、is null否则将引擎放弃使用索引而进行全表扫描。

2、很多时候用 exists 代替 in 是一个好的选择 (in 里面的查询会创建一张临时表)

索引优化

最左原则

主键一定要索引

where on gourp by order by 的列中使用索引

建议使用区分度高的列建立索引

where 中不能带有逻辑查询索引

为较长的字符串使用前缀索引

mysql索引什么时候不生效?
1.like语句 
2.列类型为字符串类型,查询时没有用单引号引起来 
3.在where查询语句中使用表达式 
4.在where查询语句中对字段进行NULL值判断 
5.在where查询中使用了or关键字, myisam表能用到索引, innodb不行;(用UNION替换OR,可以使用索引) 
6.全表扫描快于索引扫描(数据量小时)
7.如果是组合索引,不是使用最左原则,索引会失效
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值