2010-10-28 48 views
0

我有一個函數從一個SQL數據庫表(「html」)中檢索相對較短的文本字符串的程序,在其上運行一些正則表達式查詢,然後將輸出存儲在另一個數據庫表(「配置文件」)中。 「Html」有大約800萬條記錄,「檔案」只存儲結果。它目前非常慢 - 在快速服務器上每個記錄超過1秒。我希望有人也許能夠指出一些明顯的是,我將能夠修復:使用兩個數據庫表提高查詢/處理RegExp函數的速度

dataComm dc = new dataComm(@"SERVER1", "html"); 
dataComm dc_bp = new dataComm(@"SERVER1", "profiles"); 

Int32 numinserted = 0; 

for (int selectc = 0; selectc < 85000; selectc++) 
{ 
    DataTable dt = dc.fetchData("SELECT top 100 * from html where processed=0"); 

    label3.Text = "Iteration " + selectc + " of 85,000"; 

    string sq=""; 
    string squpdate = ""; 

    Int32 thisid=0; 

    for (int i = 0; i < dt.Rows.Count; i++) 
    {      
    // CODE THAT RUNS THE REGULAR EXPRESSIONS. 
    thisid = Convert.ToInt32(dt.Rows[i]["ID"]); 

    sq += @"INSERT INTO profiles (field1, field2, [etc.]) VALUES ('value1','value2', [etc.]); "; 
    numinserted++; 

    squpdate += "UPDATE html SET processed=1 WHERE ID=" + thisid.ToString() + "; "; 
    } 

    dc.executeNonQuery(squpdate); 

} 
+0

什麼版本的SQL? – Brad 2010-10-28 00:58:26

+0

您是否知道例程各部分的相對時間:即RegExp調用,INSERT執行(缺少?)還是UPDATE調用? – richaux 2010-10-28 07:46:58

回答

0

答案可能是根本就沒有對HTML運行正則表達式,但在一些其他的方式解析它,例如與HTML agility pack。用正則表達式解析HTML是「不好的」,做很多事情是非常「糟糕」的。 (這將取決於正則表達式,但它們可以寫成使得它們對於此任務來說效率非常低)。