从大型DB中获取不起作用

时间:2015-02-23 13:06:11

标签: mysql sql database

我拥有超过百万条记录的MySQL数据库。我不是数据库的所有者,也没有写入/修改权限。我有一个名为MyDB的小目标数据库,它从巨型视图中获取一些字段。现在这些是我在 MysqlWorkbench 上使用庞大的百万记录表时遇到的问题..

GiantDB(MySQL database)

--gview(over a million records. No permissions to write)

+id(PK)
+name-String
+marks-Integer
+country-String

myDB(Target SQLite DB)

--mytable

+id(PK)
+name-String

所以这是这两个数据库的草图。如果没有设置行限制(到1000),我无法查询gtable。

count(*)也无效。

我的最终目标是从gtable中将百万个名字插入myTable。

将gView的字段插入myTable需要永远,并自动被杀死。 有效地做到这一点的任何方式?

我抬起头,人们在谈论索引和东西。我完全不知道该怎么做。一个明确的解释将是非常有帮助的。谢谢和问候。

1 个答案:

答案 0 :(得分:1)

(一百万行是一张中等大小的桌子。不要让它的大小扔给你。)

从评论主题看起来,您需要花费太长时间才能从MySQL中读取结果集,因为在输出数据库中创建行需要时间。

将此视为从MySQL导出,然后导入到sqlite。

您可以使用MySQL Workbench的export...功能进行导出,该功能本身使用mysqldump命令行工具。

然后,您可能需要编辑export命令创建的.sql文件,以便它与sqlite兼容。然后将其导入sqliite。有多种工具可以做到这一点。

或者,如果您在某个程序(也许是python程序)中执行此操作,请尝试逐行从MySQL数据库中读取结果集并将其写入临时磁盘文件。

然后断开与MySQL数据库的连接,打开你的sqlLite数据库和文件,通过like读取文件行并将其加载到数据库中。

或者,如果您编写文件使其看起来像这样

1,"Person Name"
2,"Another Name"
3,"More Name"

等,您将拥有一个所谓的CSV(逗号分隔值)文件。有许多工具可以将这些文件加载​​到SQLlite中。

另一种选择:如果您的MySQL数据库对您可以执行的操作有非常严格的限制,那么这将是强制性的。例如,他们可能会给您30秒的查询时间限制。 询问您的数据库管理员以获取帮助将此表导出到您的sqlite数据库。告诉她你需要一个.csv文件。

您应该能够说SELECT MAX(id) FROM bigtable以获得最大的ID值。 如果这不起作用,表格可能已损坏。

还有一个建议:分批获取行,比如一万个。

SELECT id, name FROM bigtable LIMIT     0,10000

SELECT id, name FROM bigtable LIMIT 10000,10000

SELECT id, name FROM bigtable LIMIT 20000,10000

SELECT id, name FROM bigtable LIMIT 30000,10000   etc etc.

这将是一个痛苦的问题,但如果您的dba不合作,它会为您提供数据。

我希望这会有所帮助。