msyql分区与分库分表
分区 工作原理 对用户而言,分区表是一个独立的逻辑表,但是底层MySQL将其分成多个物理子表,这对用户来说是透明的,每一个分区表都会使用一个独立的表文件。 如果数据量比较大,可以进行分区。分区对PHP层面是无感知的,对代码没有改变。但是需要对mysql的表来做一个物理层面的拆分。将数据通过一些策略进行拆分,客户也是无感知的,对业务逻辑也没有什么影响。 创建表时使用partition by 子句定义每个分区存放的数据,比如年龄,地区等等。执行查询时, 优化器 会根据分区定义过滤那些没有我们需要数据的分区,这样查询只需要查询所需数据存在的分区即可。 目的 将数据按照一个较粗的力度分在不同的表中,这样可以将相关的数据存放在一起。而且如果想一次性删除整个分区的数据也很方便。 使用场景 表非常大或者只在表的最后有热点数据,其它都是历史数据。可以分区 分区表的数据更容易维护,可以对独立的分区进行独立的操作,就相当于独立的表,不过用户感知不到 分区表的数据可以分布在不同的机器上,从而高效利用资源。 可以使用分区表来避免某些特殊的瓶颈。比如数据库的特殊查询等等。 可以备份和恢复独立的分区。 限制 一个表最多只能有1024个分区 最好用mysql5.5以上的,可以使用列分区。否则mysql中含有null会使分区过滤无效。 分区字段中如果有主键 和唯一索引列,那么主键列和唯一列都必须包含进来。