首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改进google应用程序脚本执行

问改进google应用程序脚本执行
EN

Stack Overflow用户
提问于 2017-08-01 04:34:20
回答 1查看 586关注 0票数 3

我正在使用下面的代码将数据从谷歌电子表格写入到mySQL数据库表中,这个脚本过去工作得很好,当它有大约4000条记录时,现在它有超过8000条记录,运行速度非常慢。是否有办法将所有谷歌电子表格数据读取到内存中,然后将其写入MySQL数据库。

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

发布于 2017-08-01 11:19:25

据我所知,当您使用

代码语言:javascript
复制
var data = sheet.getDataRange().getValues();

它将所有数据从"sheet1“表中读取到内存中,因此您进行数据检索/读取的方式似乎尽可能快。但是,请注意,getDataRange()将包含文本的矩形读取到内存中,因此,如果您可以对数据进行假设,例如,您有多少列-在这种情况下,您只能使用getRange(row,column,numRows,numColumns)将某些部分读取到内存中,则可以对此进行优化。

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

代码语言:javascript
复制
var start = new Date().getTime();

// Insert test code here

var end = new Date().getTime();
Logger.log(end - start);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45424822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档