Google apps script 改进google应用程序脚本执行

Google apps script 改进google应用程序脚本执行,google-apps-script,Google Apps Script,我正在使用下面的代码将数据从google电子表格写入mySQL数据库表,这个脚本在有大约4000条记录时工作正常,现在有8000多条记录,运行速度非常慢。是否有办法将所有google电子表格数据读入内存,然后将其写入MySQL数据库 function myfunction() { var colA; var colB; var colC; var colD; var colE; var mysqldb = Jdbc.getConnection("jdbc:my

我正在使用下面的代码将数据从google电子表格写入mySQL数据库表,这个脚本在有大约4000条记录时工作正常,现在有8000多条记录,运行速度非常慢。是否有办法将所有google电子表格数据读入内存,然后将其写入MySQL数据库

function myfunction() { 
  var colA;
  var colB; 
  var colC; 
  var colD;
  var colE;  

  var mysqldb = Jdbc.getConnection("jdbc:mysql;dbipaddress","user","pa$$word");
  var sql = mysqldb.createStatement();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); 
  var data = sheet.getDataRange().getValues();  

  mysqldb.setAutoCommit(false) 

  var query = "{call [dbo].[sp_copygsheets](?,?,?,?,?)}";
  sql = mysqldb.prepareCall(query);

  for (var i = 1; i < data.length; i++) {
  colA = data[i][0];
  colB = data[i][1]; 
  colC = data[i][2]; 
  colD = data[i][3]; 
  colE = data[i][4];  

  sql.setString(1, colA);
  sql.setString(2, colB); 
  sql.setString(3, colC); 
  sql.setString(4, colD);
  sql.setString(5, colE); 
  sql.addBatch();
  }

  sql.executeBatch();
  mysqldb.commit();

  sql.close();
  mysqldb.close();
}
函数myfunction(){
可乐;
var-colB;
var-colC;
变冷;
瓦尔·科尔;
var mysqldb=Jdbc.getConnection(“Jdbc:mysql;dbipaddress”,“user”,“pa$$word”);
var sql=mysqldb.createStatement();
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var data=sheet.getDataRange().getValues();
mysqldb.setAutoCommit(false)
var query=“{call[dbo].[sp_copygsheets](?,?,?,?,?,?)}”;
sql=mysqldb.prepareCall(查询);
对于(变量i=1;i
据我所知,当您使用

var data = sheet.getDataRange().getValues();
它将“sheet1”工作表中的所有数据一块读取到内存中,因此您执行数据检索/读取的方式似乎尽可能快。但是,请注意,getDataRange()将包含文本的矩形读取到内存中,因此,如果您可以对数据进行假设,例如,您有多少列,则可以对其进行优化,在这种情况下,您可以改为使用getRange(行、列、numRows、numColumns)将某些部分读取到内存中

我认为可能是转换部分的for循环使您的速度变慢了,但我不确定,因此您可以通过使用以下代码来测量时间性能来跟踪性能问题的根源:

var start = new Date().getTime();

// Insert test code here

var end = new Date().getTime();
Logger.log(end - start);
您可以在脚本编辑器中选择View-Execution transcript以查看上次脚本执行的详细时间安排。