mysql - 从大数据库中获取不起作用

标签 mysql sql database

我的 MySQL 数据库包含超过一百万条记录。我不是数据库的所有者,并且没有写入/修改权限。我有一个名为 MyDB 的小型目标数据库,它从巨大的 View 中获取一些字段。现在,这些是我在 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 需要很长时间,并且会自动被终止。 有什么方法可以有效地做到这一点吗?

我抬头一看,人们正在谈论索引之类的东西。我完全不知道该怎么办。一个清晰的解释会有很大的帮助。谢谢并致以问候。

最佳答案

(一百万行是一个中等大小的表。不要让它的大小让你困惑。)

从评论线程来看,您从 MySQL 读取结果集的时间似乎太长,因为在输出数据库中创建行需要时间。

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

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

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

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

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

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

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 不合作,它会为您获取数据。

我希望这会有所帮助。

关于mysql - 从大数据库中获取不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28674521/

相关文章:

php - 如何获取表1中不包含表2中的id和用户名的数据

php - 在 Mysql 上更新 BLOB 缩略图时出现问题

php - 无法连接数据库,无法插入数据库

c# - 迁移 C# 应用程序以连接到 PostGres 数据库

SQL 服务器查询 : how to check value within range

php - 数据库登录失败,Mysql、html、php

PHP 比较 2 个整数并用更大的整数更新表

SimpleDateFormat 中的 Java 日期模式在 SQL 数据库中不起作用

mysql - JDBC 驱动程序上的 SQL 注入(inject) - MySQL?

python - 在 Django 中查询多个表