从MySQL检索大表

时间:2017-01-17 15:28:22

标签: mysql sql database pymysql

我有一个非常大的MySQL数据库表 - 大约十亿行(有些单独大)。我想从Python中逐行处理所有这些内容。我想知道最好的方法。我不需要一致性。桌子不断变化,但这些都不会影响我的工作。我想知道最好的方法。

  • SELECT * FROM TABLE就坐在那里。
  • 我尝试对数据进行分区。我会使用ID块(SELECT)执行一系列WHERE ID >= 1,000,000 AND ID < 2,000,000语句。这并不快,但它或多或少有效。当存在非顺序ID时,它停止工作。
  • 我尝试使用千条语句找到合适的分区,例如:SELECT ID FROM TABLE ORDER BY ID LIMIT 1 OFFSET 100,000,000。这对于大偏移来说非常慢。我认为每个这样的陈述都涉及到表的顺序遍历,判断性能缩放。以这种方式获取一组分区似乎是一个O(n ^ 2)过程,由于n是十亿分,这是不切实际的。

我想知道是否有一种以合理的性能流式传输整个数据表的好方法。我无法停止对表的写入(以大约每秒几十的速度进入),但如果我在读数上失去一致性,那就没问题了。我认为应该有一些标志告诉MySQL不要为给定的读数提供ACID,但我还没有找到它(也许我只是在谷歌失败了)。

这个数据库的管理员,无法进行架构更改等。它是一个主要操作的生产数据库(它非常好我已经进行了一些数据分析(它根本没有进行优化) - 我想抓住数据并把它放在一个更合适的地方格式)。我可以访问单个只读副本(与分析此类数据的其他几个人共享)。我无权创建另一个只读副本,或者不使用生产数据库。

0 个答案:

没有答案