簡體   English   中英

優化 WebSQL 本地數據庫填充

[英]Optimizing WebSQL Local Database Population

我正在嘗試優化我的本地數據庫在正在開發的 Web 應用程序中的填充速度。 目前,它使用 PHP 訪問數據庫,然后使用 Javascript 將該數據插入本地數據庫。

問題是,除了幾個條目之外的任何東西都會減慢它的速度,我很確定這是因為它對每一行執行一個單獨的 SQL 查詢。 我一直在閱讀交易(提交和回滾等等),這似乎是一個答案,但我不完全確定如何實施它,甚至不確定在哪里實施。

這是加載特定表的函數之一的示例。

function ploadcostcodes()
{
$IPAddress = '';
$User = '';
$Password = '';
$Database = '';
$Company  = '';
$No='';
$Name='';
ploadSQLConnection($IPAddress,$User,$Password,$Database,$Company);

// 這連接到信息來自的實際數據庫。

$Login = 'XXXXXXX';
$conn=mssql_connect($IPAddress,$Login,$Password);
 if (!$conn )
{
      die( print_r('Unable to connect to server', true));
}
 mssql_select_db($Database, $conn);

 $indent="        ";

$sql="SELECT Cost_Code_No as No, Description as Name, Unit_of_Measure FROM v_md_allowed_user_cost_codes WHERE Company_No = " . $Company . " and User_No = '" . $User . "'";

 $rs=mssql_query($sql);
 if (!$rs)
 {
   exit("No Data Found");
 }

 while ($row = mssql_fetch_array($rs))
 {
     $No = addslashes($row['No']);
     $Name = addslashes($row['Name']);
     $Name = str_replace("'",'`',$Name);
     $Unit = addslashes($row['Unit_of_Measure']);

  //THIS IS WHERE I SEE THE PROBLEM

     echo $indent."exeSQL(\"INSERT INTO Cost_Codes (Cost_Code_No,Name,Unit_of_Measure) VALUES('".$No."','".$Name."','".$Unit."')\",\"Loading Cost Codes...\"); \r\n";
 }
 mssql_free_result($rs);
 mssql_close($conn);
 return 0;
}

我不知道什么需要交易(或者即使那是需要做的)。 有 MSSQL 訪問數據,SQLite 插入數據,Javascript 運行 PHP 代碼。

我會准備一個帶占位符的查詢,然后用正確的 arguments 為每一行執行它。像這樣的東西(僅 JS 部分,使用underscore.js作為數組助手):

db.transaction(function(tx) {
    var q = 'INSERT INTO Cost_Codes (Cost_Code_No, Name, Unit_Of_Measure) VALUES (?, ?, ?)';
    _(rows).each(function(row) {
        tx.executeSql(q, [row.code, row.name, row.unit]);
    });
});

編輯:帶占位符的查詢有兩個主要好處:

  1. 它使數據庫引擎更容易緩存和重用查詢計划(因為您正在運行同一個查詢一百次而不是一百個不同的查詢一次)。
  2. 它使 escaping 數據和避免 SQL 注入變得容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM