2014-10-20 70 views
0

我正嘗試在mysql數據庫中提供類似1 000 000行的表。 我使用Lua和功能:從Lua表中插入數據到數據庫(Mysql)

CONN:執行( 「INSERT INTO訂單(日期,訂單類型)VALUES(」「 ..tab [1] [dateIndex] ......

問題是,它很長,我真的需要更多的效率 你有其他的解決方案(也許創建一個.csv並加載它的MySQL,也許有一個函數,可以加載矩陣數據庫效率更高,...)使用Lua是我使用現有項目時的一項義務

感謝您的幫助

回答

0

首先,您可以停止對每個插頁進行提交。

此外,您可以使用準備好的查詢。它提供了由Lua-DBI和Lua-ODBC 我使用ODBC。

local env = odbc.environment() 
lcoal db = env:driverconnect{ 
    Driver = IS_WINDOWS and '{MySQL ODBC 5.2 ANSI Driver}' or 'MySQL'; 
    db='test'; 
    uid='root'; 
}; 

cnn:set_autocommit(false) 
local stmt = db:prepare("INSERT INTO orders (dates, ordertype) VALUES(?,?)") 
for i, row in ipairs(tab) do 
    stmt:bindstr(row[dateIndex]) 
    ... 
    stmt:execute() 
    if i % 1000 == 0 then 
    cnn:commit() 
    end 
end 

也提供ODBC變量。可能會更快,因爲他們每次都不會調用SQLBindParam。

-- create stmt as preview 
    ... 
    local dateValue = odbc.date():bind_param(stmt, 1) 
    local orderValue = odbc.ulong():bind_param(stmt, 2) 

    for i, row in ipairs(tab) do 
     dateValue:set(row[1]) -- data is yyyy-mm-dd e.g. 2014-10-14 
     orderValue:set(row[2]) 
     stmt:execute() 
     ... 
     -- same as preview