mysql 分区优化及使用

        这是一个分区的使用误区,在大数据当钟前闭后开是很常见的写法。代码如下:

select
*
from t
where t.date <= CONCAT(LEFT('2019-01-28',7),'-01')
and t.date > CONCAT(LEFT(DATE_ADD('2019-01-28',INTERVAL 1 MONTH),7),'-01');

          执行计划如下,明显使用了两个分区:

          优化之后代码,这样执行计划走一个分区,速度会显著提升:

SELECT
*
FROM  fct_userlog t
WHERE t.ActionDate >= CONCAT(LEFT('2019-01-28',7),'-01')
  AND  t.ActionDate < DATE_ADD(CONCAT(LEFT(DATE_ADD('2019-01-28',INTERVAL 1 MONTH),7),'-01'),INTERVAL -1 SECOND);

         执行计划:


 

         优化总结:其实该表在优化之前走两个分区关联一个表,数据出数会长达20分钟;优化之后数据出数只需18秒。因此仅仅是一两个分区数据差异是不会引起速度如此巨大的差异的。其实究其原理,还是分区的使用上。

         分区表:即将一张表根据一定的规则分解成多个容易管理的部分。逻辑上是一个表,底层却是多个物理分区。大数据当中,通常使用分区表较多。这个和分表有一定的区别(主要分担数据库操作次数,读写分离,减小读写压力,提升性能)。其实大数据当中数据库并不是频繁访问的,因此使用的场景并不多。

        其实理解了以上分区表的含义并不能解释为什么速度差异会如此之大,无论是range,list,hash分区,其实原理类似。关键点是mysql当中查询及其依赖索引,但是mysql分区表的索引只针对于单个分区建立,当查询两个分区时并不能完全使用索引,从而造成速度的巨大差异。因此我们在使用上需要做一些衡量

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值