2015-02-23 24 views
0

我有這個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中需要永久使用,並自動被殺死。 有效地做到這一點的任何方式?

我擡起頭,人們都在談論索引和東西。我完全無能爲力。一個明確的解釋會有很大的幫助。感謝致敬。

+0

你是從gtable複製每一行嗎? – jarlh 2015-02-23 13:10:29

+0

是啊..每一行都需要.. – Tania 2015-02-23 13:12:01

+0

你需要一個可以訪問查詢「GiantDB」的ID - 與你的經理交談 - 解釋你需要什麼以及爲什麼需要它 - 解釋爲什麼它要「永遠」 。 – Ditto 2015-02-23 13:14:10

回答

1

(一百萬行是一箇中等大小的表。別讓它的大小你扔。)

從它聽起來像你花費太長時間讀取結果從MySQL集評論跟帖,因爲在輸出數據庫中創建行需要時間。

將此視爲從MySQL導出,然後導入到sqlite。

您可以使用MySQL Workbench的export...功能執行導出,該功能本身使用mysqldump命令行工具。

然後,您可能需要編輯export命令創建的.sql文件,以便它與sqlite兼容。然後將其導入sqliite。有多種工具可以做到這一點。或者,如果你在一個程序(一個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不合作。

我希望這會有所幫助。

+0

嗨,這似乎是一個很好的選擇,但我的select *語句掛起時,我試圖查詢在Mysql工作臺中的視圖沒有指定限制。如果我以編程方式執行它,它會工作嗎? – Tania 2015-02-23 13:46:40

+0

嘗試在Workbench中執行'export'而不是查詢。 – 2015-02-23 13:50:06

+0

它說「錯誤:未處理的異常:built_in_fucntion_or_method」對象沒有屬性__getitem__ – Tania 2015-02-23 14:02:20