MySQL-mysql 分表真正的意义在哪里?

发布于 2017-04-22 16:40:15 字数 61 浏览 1155 评论 7

mysql在很多时候启用分表存储数据!比如:用户基本信息和用户一些扩展信息是分表存储的,但是真的意义在哪里?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

清晨说ぺ晚安 2017-10-29 12:59:49

主要还是为了提高检索速度,减少磁盘的io。可以按照hash或者md5,还可以按照uid左移多少位分表。都行。

晚风撩人 2017-10-23 00:28:25

分表,提高了数据操作的效率,尤其是Write操作的效率。
例如:
对user_id进行hash(或者如果user_id是数值型的话直接使用user_id 的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也 就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时 候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。

优点:数据分布均匀
缺点:数据迁移的时候麻烦,不能按照机器性能分摊数据

真正的意义就是比如在上亿级别的一个表里,
带条件的查询需要遍历整个数据表的对应字段,
寻找符合条件数据,
如果分表以后可以让查询减小范围,
避免不必要的磁盘检索,
最终实现定向小范围快速查询

泛泛之交 2017-09-19 02:56:50

使得单表单次查询所需的检索行数变少,时延变短。
使得产生表锁争夺的几率和代价变低,吞吐量变高。

甜柠檬 2017-08-28 21:58:47

减少热点争用,提升执行效率。
比分表更重要的是分库,成倍提升整个系统的容量。

瑾兮 2017-08-01 15:52:41

补充一个:
1、使用MyISAM存储引擎创建表的时候,当表不包含变量长度列(VARCHAR, BLOB, 或TEXT)时,表使用静态格式存储,这种格式每一行用固定的字节来存储,能提高读取速度
2、将大字段从原表中拆分出来,通过单独的表进行存放,让我们在访问其他数据的时候大大降低 IO 访问,从而使性能得到较大的改善。
具体的,可以阅读《MySQL性能调优与架构设计》这边书,写得很不错

虐人心 2017-07-01 09:46:35

分表的目的在于,减小数据库的负担,缩短查询时间。单张表的访问及写入很频繁,这时候就可以根据一定的业务规则来分表,这样就能减轻单表压力,并且还能解决各个模块的之间的频繁交互问题。

另外比如说用户信息表,我们把用户的基本信息(如用户id,用户名)放在一个表中,再将其他用户扩展信息放在另外的一些表中,这样既因为基本信息的访问非常频繁,另外也方便了我们使用mencache等缓存来替代这个表的查询功能,如果启用缓存,程序改动也会非常的小。

虐人心 2017-06-28 02:43:15

我觉得主要还是解决锁表的问题,缩短SQL执行时间。

我了解的分表方式有这么几种
1.基本信息一个表 详细信息一个表
2.解决1对1 , 1对多 多对多的关系
3.像日志这样的有时间性,可以一个月一个表
4.像用户这样的有用户ID,可以根据用户ID的大小分段,1-10000一个表
5.hash分表
6.表分区,MYSQL在5.3后支持表分区了,目的也一样

我说一下我的一个应用吧,我用的是HASH分表,对用户名做HASH进行分表,用户量目前为1亿,
分了100个用户分表,每个分表里存着100万条用户信息,分表里冗余了user_id user_name,因为这二个字段是不会变的

几种应用场景:
1、注册,对用户名HASH,然后写入对应的分表
2、登录,通过用户名HASH值,直接查相应的分表
3、修改密码、修改用户信息,直接改相应的分表

对于注册时自增user_id,user_name的唯一性检查采用别的方式解决

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文