none
如何通过sql语句比较2个表结构? RRS feed

  • 问题

  • 现在系统数据量很大,单个表的数据已经达到了上千万了,现在在考虑做分表,请教下做分表的过程中,如何确保分表之间的表结构保持一致呢?
    如果分表间的数据结构不一样的话,用sql语句如何能找出不同的地方呢?(包括表字段,主键,索引等等),请大侠们指教.

    除了做分表外,还有什么其它好的办法呢?

    2013年9月23日 10:34

答案

  • 这个问题,个人觉得主要的问题在于控制表结构个性,而不是比较表结构吧

    应该是保障在主表个性的时候,同时个修改分表,比如你可以人为控制,或者使用 DDL 触发器做提醒

    如果事后来控制的话,类似UNION 主表分表的查询,如果没有写清楚列关系,那么就会报错,那样就是业务程序出错,那个有影响业务的风险,应该是要避免的

    如果要考虑SQL比较表结构的话,你可以查询 sp_help 存储过程定义,了解如何查询出表的相关信息,然后对这些相关信息做比较就可以了(不是简单的一两句SQL可以搞定)

    • 已标记为答案 zyyjc 2013年9月26日 4:55
    2013年9月23日 11:57
  • 这里有tablediff工具的教程

    tablediff工具实用

    • 已标记为答案 zyyjc 2013年9月26日 4:55
    2013年9月24日 13:42

全部回复

  • 这个问题,个人觉得主要的问题在于控制表结构个性,而不是比较表结构吧

    应该是保障在主表个性的时候,同时个修改分表,比如你可以人为控制,或者使用 DDL 触发器做提醒

    如果事后来控制的话,类似UNION 主表分表的查询,如果没有写清楚列关系,那么就会报错,那样就是业务程序出错,那个有影响业务的风险,应该是要避免的

    如果要考虑SQL比较表结构的话,你可以查询 sp_help 存储过程定义,了解如何查询出表的相关信息,然后对这些相关信息做比较就可以了(不是简单的一两句SQL可以搞定)

    • 已标记为答案 zyyjc 2013年9月26日 4:55
    2013年9月23日 11:57
  • 请教下做分表的过程中,如何确保分表之间的表结构保持一致呢?

    不是很明白LZ的意思,你分表的时候新建一个表,这个表的结构肯定跟原表一模一样啊,然后select * into 新表 from 旧表 where 根据一些业务数据规则

    如果分表间的数据结构不一样的话,用sql语句如何能找出不同的地方呢?(包括表字段,主键,索引等等)

    LZ您可以使用 编写表脚步为  按钮来编写表脚步,就可以看到表中用了什么索引,也可以在SSMS对象自由管理器里,点开 表的十字架

    可以看到表中建立了哪些触发器、索引、约束等

    一般数据量比较大的话,方向主要有:分库纵向切分,分表横向切分、表分区]、数据归档
    2013年9月23日 12:01
  • Sql server comes with tablediff, books online has details of it.
    2013年9月23日 13:31
  • 在在考虑做分表,请教下做分表的过程中,如何确保分表之间的表结构保持一致呢?

    表分区是一个表啊,怎么会有表结构的问题啊。只是不同的分区数据分散到不同的Filegroup.


    Please Mark As Answer if it is helpful.

    2013年9月24日 1:49
  • To different partitions because you can put all partitions in same file group.
    2013年9月24日 1:53
  • 分表和表分区不是一样的吧!表分区在逻辑上是一个表,我说的分表是在逻辑和物理上都是单独的,比如表A,表B,表C这样存储不同用户的数据.

    我现在遇到了的问题就是某些表的数据量太大了,现在想根据不同的用户划分到不同的表里.比如A用户建个A表,B用户建个B表这样子.

    因为表结构可能会根据业务的情况不断的调整,比如我现在已经建好了A,B,C,D,E等等表结构一样的分表,后面有可能会统一再增加或者修改字段的长度之类的,随着表结构的调整,有可能会导致这些表的结构出现不一致的情况,所以想比较下这些表存在哪些不一致的地方!

    2013年9月24日 11:26
  • 这个问题,个人觉得主要的问题在于控制表结构个性,而不是比较表结构吧

    应该是保障在主表个性的时候,同时个修改分表,比如你可以人为控制,或者使用 DDL 触发器做提醒

    如果事后来控制的话,类似UNION 主表分表的查询,如果没有写清楚列关系,那么就会报错,那样就是业务程序出错,那个有影响业务的风险,应该是要避免的

    如果要考虑SQL比较表结构的话,你可以查询 sp_help 存储过程定义,了解如何查询出表的相关信息,然后对这些相关信息做比较就可以了(不是简单的一两句SQL可以搞定)

    是的,现在写了批量修改分表的语句,不过分表比较多,还是会担心存在分表之间结构不一致的情况,所以想在正式发布前再检查下,以防万一的.
    2013年9月24日 11:32
  • Did you look at tablediff yet?
    2013年9月24日 13:00
  • 这里有tablediff工具的教程

    tablediff工具实用

    • 已标记为答案 zyyjc 2013年9月26日 4:55
    2013年9月24日 13:42