扫码关注官方订阅号
我想了解下mysql+php的数据分表或者分库的原理及实现. 请高手指点
分表有横向分表、纵向分表两种方式。 一种方式是如果数据库记录条数太多,可以根据一定的规则分表,比如按数量每10w条建一个表,比如按数据属性,男用户一个表,女用户一个表,不男不女或搞不清的一个表;也可以用hash分表。然后可以用计算或者对照表的方式查表。
还有一种是按列分表,一部分属性在一个表,另一部分在另一个表。常见的像是user和userDetail表吧。
如果一个表条数过多,可以通过分表提高效率。我最近用到一次,每个用户有多个note记录,note以前放在一个表里,因为这个表会变得很大,所以提前分了出来。按照所属用户的id的最后一位分为note_0,note_1,.......note_9十个表。为了统一,每个表不使用自增的id作为主键,而是使用随机的guid。 这样取出一条note需要两个参数,user_id,和guid。前者用于得到表名,后者用于得到row。 -------------------
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
分表有横向分表、纵向分表两种方式。
一种方式是如果数据库记录条数太多,可以根据一定的规则分表,比如按数量每10w条建一个表,比如按数据属性,男用户一个表,女用户一个表,不男不女或搞不清的一个表;也可以用hash分表。然后可以用计算或者对照表的方式查表。
还有一种是按列分表,一部分属性在一个表,另一部分在另一个表。常见的像是user和userDetail表吧。
如果一个表条数过多,可以通过分表提高效率。我最近用到一次,每个用户有多个note记录,note以前放在一个表里,因为这个表会变得很大,所以提前分了出来。按照所属用户的id的最后一位分为note_0,note_1,.......note_9十个表。为了统一,每个表不使用自增的id作为主键,而是使用随机的guid。
这样取出一条note需要两个参数,user_id,和guid。前者用于得到表名,后者用于得到row。
-------------------