讨论下blog数据表分表的方法

2019-03-25 13:51|来源: 网路

有一张blog数据表,数据很多的话需要分表。
blog表的字段:
blog_id, user_id, content, created_at

如果按照blog_id来分表,访问某一个用户的所有blog,就要在N张blog表里查询。
如果按照user_id来分表,访问某一篇blog要查询N张blog表。

是否有更好的分表方法,能解决上面的问题呢?

问题补充:<div class="quote_title">albb0608 写道</div><div class="quote_div">可以不分表,建立分区表</div> <br />分区不就是分库吗?

问题补充:<div class="quote_title">deepfuture 写道</div><div class="quote_div">2个表 <br />1)blog_id, content,created_at <br /> <br /> <br />2)user_id,blog_id</div> <br /> <br />表1)可以按user_id拆分成多个小表, <br />但是表2)的记录数量和拆分前的表的记录数量一样多阿。 <br />这样可以加快查询速度?

问题补充:<div class="quote_title">deepfuture 写道</div><div class="quote_div">可以,因为2个表就必须用数据连接,数据表连接最后会被优化,不能参与连接的记录将不会进入计算范围,你应尽量让尽可能少的记录参与最后的连接运算,这样速度会更快,让数据冗余就是一种加快数据访问速度的方法</div> <br />好的,多谢。给分。

相关问答

更多
  • 管理员登录后台,站长,帖子分表。注意事项如下:forum_post(主表)必须保留300M的数据,帖子分表前一定要先关闭站点,做好数据库备份,期间绝对不能重起服务器或者停止MySQL服务。
  • $sql="show tables"; $r=mysql_query($sql); $data=mysql_fetch_array($r); 这样就可以获得数据库中的表信息了
  • 方法有很多,建二级缓存,把用户登录和所在的表名缓存在一起,很轻松就定位到了, 还可以用分表策略,每个登录用户账号HASH一个值,做为表名的后缀,最多50个,都可以控制。 分表:你只要记住必须要根据什么来分这句话就可以了。 插入:总要用用户名吧。根据他定位放到哪一张表里。
  • 如果是win系统的话,推荐使用heidisql软件管理mysql 这样就知道如何简单添加数据了,而不是使用sql语句 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
  • id name pri 1 父1 0 2 父2 0 101 子101 1 102 子102 1 201 子201 2 202 子202 2 pri列表示父子关系 0表示最高等级的节点。 1表示这行商品的父节点是1 即id=1的商品 如此类推。。。
  • 删除重复项 public DataTable RemoveDuplicateRows(DataTable dTable, string colName) { Hashtable hTable = new Hashtable(); ArrayList duplicateList = new ArrayList(); //Add list of all the unique item value to hashtable, which stores combination of key, v ...
  • 您可以使用LINQ并将其转换为字典: DataTable dt = new DataTable("test1"); dt.Columns.AddRange(new DataColumn[] { new DataColumn("TASKID"), new DataColumn("GROUPID"), new DataColumn("GROUPNAME") }); dt.Rows.Add(new object[] { 12, 2, "A" }); dt.Rows.Add(new object[] { 13, 3 ...
  • 您可以使用DefaultView.ToTable方法,该方法允许您在新表中指定所需的列 在这个例子中,我使用变量tableWithData来表示具有要提取的值的数据表,并使用变量tableWithoutData来表示仅包含列名的表。 变量newTable是另一个接收ToTable方法结果的数据表,但您也可以使用tableWithoutData作为调用的目标。 Dim newTable = tableWithData.DefaultView.ToTable(False, tableWithoutData.Co ...
  • 两种方法: 将所有内容转换为字符串并使用ArrayList> ,其中每个条目都是由ArrayList表示的行。 优点:不需要创建自己的类来表示“行”。 缺点:需要转换数据,不能在不转换数据的情况下进行数学运算,需要确保所有行的长度相同。 正如dystroy所说,在表中创建一个表示Row的类,并使用ArrayList 优点:条目保持其实际类型,行没有可变长度(除非您希望它们),并且您可以使用有意义的方式来访问列(例如row.getDate()而不是row.g ...
  • 所以你正在使用服务器端处理。 ......这样: $(document).ready(function () { var table = $('#TableID').DataTable({ "processing": true, "serverSide": true, //any other configuration options "ajax": "path/to/processor" }); 你可以强制它自动刷新制作表的ajax param每12 ...