首页 > 数据库技术 > 详细

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

时间:2016-01-24 01:52:02      阅读:274      评论:0      收藏:0      [点我收藏+]

我觉得主要还是解决锁表的问题,缩短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的唯一性检查采用别的方式解决

 

------------------------------

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

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

1、使用MyISAM存储引擎创建表的时候,当表不包含变量长度列(VARCHAR, BLOB, 或TEXT)时,表使用静态格式存储,这种格式每一行用固定的字节来存储,能提高读取速度
2、将大字段从原表中拆分出来,通过单独的表进行存放,让我们在访问其他数据的时候大大降低 IO 访问,从而使性能得到较大的改善。

---------------------------------

分表,提高了数据操作的效率,尤其是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中。

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

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

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

原文:http://www.cnblogs.com/duanxz/p/3770181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!