먼저 각 삽입에서 커밋을 중지 할 수 있습니다.
또한 준비된 쿼리를 사용할 수 있습니다. 그것은 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