【问题标题】:How do I split a large table into a smaller multiple tables using mysql command line tool?如何使用 mysql 命令行工具将一个大表拆分为一个较小的多个表?
【发布时间】:2011-01-17 17:14:43
【问题描述】:

我有一个 mysql 表,我想将它拆分成更小的表。我想分解 1 - 199 和 200 - 299 等范围内的数据并将它们放入新表中。我将如何从 mysql 命令行工具执行此操作?

【问题讨论】:

  • 只是出于兴趣,为什么你要这样做?
  • 该表是与产品一致的配置文件编号列表。在我的例子中,0 - 199 是外壳(木饰)型材,200 - 299 是基本型材,依此类推。所以我认为每个类别都有自己的表格会更好。当我想要的只是外壳时,而不是每次都加载整个表。你的想法?
  • @ghostz00 如果不了解所涉及的各种模式,很难知道。然而,从你所说的现有表被用来存储不相关的项目(即:一个套管!=基本配置文件?),所以听起来你在做正确的事情™在宏伟的计划中. :-)
  • NOT 这样做 - 一张桌子比多张桌子好。如果需要区分记录,请添加类型代码。
  • @OMG Ponies - 从它的声音来看,该表目前有点像杂项无关条目的转储。如果是这种情况,为什么不建议创建专用表?

标签: mysql database


【解决方案1】:

实现这一点的最简单方法就是使用mysqldump 导出现有的表架构和数据。 (我建议使用“--complete-insert”选项。)

然后您可以手动编辑生成的文件,方法是添加相关的表创建语句并编辑 INSERT 行以使用适当的表名。

顺便说一句:

  1. 虽然可能不相关,但请注意在执行编辑等操作时将数据添加到原始表中。

  2. 如果这一切听起来有点手动和痛苦,那是因为它是。但是,您在这里有一个相当奇怪的要求。

【讨论】:

    【解决方案2】:

    算出最大范围,比如 10000

    for i in $(seq 0 100 10000) ; do 
       echo "create table Table$i like MyTable" | mysql mydb
       echo "insert into Table$i select * from MyTable where id >=$i and id < $(($i+100))" | mysql mydb
    done
    

    但是,不要这样做。几乎没有任何理由像这样分解数据,它只会使查询更加困难,管理更加困难,无论谁(可能是你)维护你的数据库/应用程序最终都会发疯。

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 1970-01-01
      • 2013-08-16
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多