为什么我们会面临分表问题?
当单表数据量过大,导致查询性能变差时,我们可以将这个大的数据表,按照一定的规则拆分成多个较小的数据表,从而提升表数据查询的性能。
举个例子 : 附近的人 如何去做?
如何分表?
1 : 使用范围路由。比如数据类型、时间戳等
2 :使用hash 方式进行分表
3 :配置路由方案,比如按照城市来区分
mysql 的 表为什么超过2000万就认为是一个大表了呢?
1. Mysql用索引组织数据,索引是B+树;
2. 非叶子节点和叶子节点,都保存在数据页中;
3. 一个数据页大小是16k,理论上mysql的B+树,最多有1280个树杈;计算过程如下: a. 非叶子节点的数据页(每个页的大小是16k),去掉每页的head和tail信息,有15k的空间,用来存放索引指针信息; b. 一个索引指针需要12Byte(主键ID:8Byte、指向下游的页号:4Byte) c. 15k/12Byte = 1280,也就是B+树最多有1280个树杈
4. 叶子节点存放的真实数据,假如一行数据的大小按1k,一个数据页,可以存15行数据; 5. 设B+树的层树为x,则叶子节点的数量有: 1280 ** (x - 1) *15 [1280的x-1次方,在乘以15]
6. 假如树只有3层(基于IO效率考虑),则可以存放:1280 ** 2 * 15 = 2.5千万 行数据