mysql在创建表时使用PARTITION BY子句定义每个分区存放的数据。在执行查询的时候优化器会根据分区定义过滤那些没有我们需要数据的分区,这样只需要查找包含需要数据的分区就可以了
以下场景适合运用表分区技术:
1,表非常大以至于无法全部放在内存中。
2,分区表的数据更容易维护,可以对一个独立的分区进行优化,检查,修复等操作。
3,分区表的数据可以在不同的无力设备上,从而高效的利用多个硬件设备
4,可以使用分区表来避免某些特殊的瓶颈
5,如果需要,还可以备份和恢复独立的分区。
分区表的主要限制
1,一个表最多只有1024个分区。
2,在mysql5.1中,分区表达式必须是整数,或者返回整数的表达式。在mysql5.5中某些场景可以直接利用列来进行区分
3,如果分区中有主键或者唯一索引的列,那么所有主建列和唯一索引列都必须包含进来。
4,分区表中无法使用外键约束。
对于大多数系统来说100个左右的分区是没有问题的。
mysql只能在使用分区函数的列本身进行比较时才能过滤分区,而不能根据表达式的值去过滤分区,即使这个表达式就是分区函数也不行。