給你的建議
1. where 條件中的欄位要加非唯一值索引(Index)
2. 不要在迴圈中反覆的查詢同一個資料表,你可以丟到 DataSet 中快取
DataSet.DefaultView.RowFilter = "欄位=值" '篩選符合條件的資料列
DataSet.DefaultView.Count '符合篩選條件的資料列數量
DataSet.DefaultView(資料列)(資料行) '讀取欄位的值
3. 不要在迴圈中執行 Update、Insert、Delete 等命令
sqlStr += "update .... " + vbCrLf
sqlStr += "insert .... " + vbCrLf
把 Execute... 丟到迴圈外面執行
※ 引述《ponyrabbit (也太捲了吧!!囧)》之銘言:
: 我的程式要讀取一個文字檔
: 裡面大概有兩萬行的資料
: 要一行一行截取各行的某欄去資料庫查詢
: 若已存在就做更新,不存在就做新增
: 不曉得為什麼每一筆更新/新增(不曉得是兩個都慢還是有快有慢)都頗慢的感覺
: 我另一個程式單純做新增,大概有六萬多快七萬筆的資料(也是讀文字檔)
: 這個程式就很快,大約十幾二十分就結束了
: 請問是因為有查詢跟更新所以才會這麼慢嗎??
: 我的語法如下
: while balahbalah~
: QuerySql = "select * from SymQuery where Part_no = '" + CompNo.ToString +"'"
: myConn = New System.Data.SqlClient.SqlCommand(QuerySql, Conn)
: myRes = myConn.ExecuteReader()
: If myRes.HasRows Then
: myRes.Close()
: SqlStr = "update SymQuery set Comp_Property = '" + Comp.ToString + "',
: Pro_value.ToString + "' where Part_no = '" + CompNo.ToString + "'"
: Else
: myRes.Close()
: SqlStr = "insert into SymQuery (Part_no, Comp_property, Pro_value) values
: ('" + CompNo.ToString + "', '" + Comp.ToString + "', '"
: + Pro_value.ToString + "')"
: End If
: myConn = New System.Data.SqlClient.SqlCommand(SqlStr, Conn)
: myConn.ExecuteNonQuery()
: Loop
: 請問以上是有哪個語法導致整個速度很慢的嗎??
--
▃▅▇▆▄ ▆▂▃ `
逝去感情如何能留住,半點癡情遺留殊不易,██▅▇▄▃ ▇▃▂" .
█████████▃i ▁▄▇
更多悽悽慘慘的遭遇…………██▆▃ █▅▆▃ˍ▄*
◢ ▂█▄▇▅▂▌.
我不知道,王~八~蛋~~! ▂▆███ █▄▃ 。fumizuki。Check。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.100.4