我的程式是c/s方式的,s是一個固定IP地址的服務器,我程式是用vb6開發的,一個個客戶端安裝了,表單上放置了一個msflexgrid控制元件,程式訪問資料庫是通過存盤程序實作的。現在遇到一個問題,我寫了一個程式程序,用來獲取這張表的記錄的。sp名字p_assocmember_GetList
存盤程序內容:
select * from doTable order by id
表單上放了一個msflexgrid控制元件,在form_load()里加了如下代碼:
Public Sub Data_Load()
Dim i As Integer
MSFlexGrid_Format
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
dbConnect
cmd.ActiveConnection = cnDatabase
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "p_assocmember_GetList"
Set rst = cmd.Execute
If rst.BOF = False Then
i = 1
Do Until rst.EOF
Me.msfgVisitor.TextMatrix(i, 1) = rst!sn
Me.msfgVisitor.TextMatrix(i, 2) = IIf(IsNull(rst!VisitDate), "", rst!VisitDate)
Me.msfgVisitor.TextMatrix(i, 3) = IIf(IsNull(rst!VisitTime), "", rst!VisitTime)
Me.msfgVisitor.TextMatrix(i, 4) = IIf(IsNull(rst!IsAppoint), "", IIf(rst!IsAppoint = 1, "是", "否"))
Me.msfgVisitor.TextMatrix(i, 5) = IIf(IsNull(rst!Name), "", rst!Name)
Me.msfgVisitor.TextMatrix(i, 6) = IIf(IsNull(rst!Sex), "", rst!Sex)
Me.msfgVisitor.TextMatrix(i, 7) = IIf(IsNull(rst!HomePhone), "", rst!HomePhone)
Me.msfgVisitor.TextMatrix(i, 8) = IIf(IsNull(rst!Mobile), "", rst!Mobile)
Me.msfgVisitor.TextMatrix(i, 9) = IIf(IsNull(rst!age), "", rst!age)
Me.msfgVisitor.TextMatrix(i, 10) = IIf(IsNull(rst!CustomerSource), "", rst!CustomerSource)
Me.msfgVisitor.TextMatrix(i, 11) = IIf(IsNull(rst!IsphTest), "", IIf(rst!IsphTest = 1, "是", "否"))
Me.msfgVisitor.TextMatrix(i, 12) = IIf(IsNull(rst!CoachName), "", rst!CoachName)
Me.msfgVisitor.TextMatrix(i, 13) = IIf(IsNull(rst!MemberCon), "", rst!MemberCon)
Me.msfgVisitor.TextMatrix(i, 14) = Format(IIf(IsNull(rst!FrontMoney), "0", rst!FrontMoney), "###.00")
Me.msfgVisitor.TextMatrix(i, 15) = IIf(IsNull(rst!regman), "", rst!regman)
i = i + 1
rst.MoveNext
Loop
End If
cnDatabase.Close
Set rst = Nothing
Set cmd = Nothing
End Sub
需要解決的問題:現在存了90條記錄,讀取時間大概是:36秒,我的筆記本是用無線網路方式的。請問大牛,如何優化一下,這樣速度太慢了。以后記錄還要多,要等半天了。
uj5u.com熱心網友回復:
你先用有線連接測驗,速度怎么樣。無線實在不適合直連遠程資料庫,實際速度差理論速度一大截。
uj5u.com熱心網友回復:
我有線試過了,也一樣,30多秒,應該跟網路關系不大,還是程式的問題,請幫我想想辦法,如何優化一下,現在才92條記錄,以后900多條,那豈不是等很久,謝謝了!uj5u.com熱心網友回復:
我優化了一下,查詢陳述句,改用要什么欄位,就select什么欄位,這樣已經提升了很多了。uj5u.com熱心網友回復:
order by 誰就在‘誰’上建索引
uj5u.com熱心網友回復:
說明你的表設計中,單個記錄的資料太大了。把表縱向分割,小欄位一個表、大欄位一個表,用 id 一一對應。
這樣可以提高查詢小欄位的速度。
其實大資料可以用外部檔案存放,比存放在資料庫中性能要好。
uj5u.com熱心網友回復:
樓上說的對。如果有很大的欄位,寧可將資料存在外部的檔案中,相應欄位只保存檔案的路徑。
否則,記錄變得太大,每一次記錄指標遷移都要觸發“游標”(虛擬快取中的資料庫)與磁盤中的資料庫檔案的大量“磁盤交換”。
uj5u.com熱心網友回復:
除了表的切分,有沒有其他技術上的辦法?uj5u.com熱心網友回復:
加我QQ2776478814,問問各位大牛,提取資料庫記錄為什么速度如此慢?焦急等待中uj5u.com熱心網友回復:
除了切分,就只有靠改善硬體了。uj5u.com熱心網友回復:
看你的代碼,感覺慢在兩個地方,第一個是你第二行代碼的網格的格式化,第二個是慢在了將資料庫中的記錄往網格中寫入的程序,比如你有90條記錄,每個記錄10個欄位,你的指標就要向下移動90次,每次再逐個的寫入10個單元格,相當于回圈了900次,建議,查詢出記錄后,直接msflexgrid=rs(記錄)應該更快一些uj5u.com熱心網友回復:
至于網格的第一行標題,重新寫一次就行了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112435.html
