最近在寫一個程式是關于sql2008資料查詢的,其中遇到了幾個問題 ,無從下手,請大神指點
我是通過TADOConnection組件與SQL Server建立聯系,通過TADOQuery組件進行資料訪問,撰寫SQL語言進行查詢,資料庫的 表很簡單,只有一個表,表中有ID、時間戳、以及20多個字串項,每項不超過10個字符,資料庫大概有15G左右。資料庫表不是我建立的,而且已經應用無法更改。
我的目的是將資料庫中的有例外變化的資料取出,然后判斷其屬于什么例外變化。
我目前是每次取出1W條資料(不敢添加查詢條件,因為例外變化的資料是不定時出現的,有時候一查就是老半天),然后通過我寫的演算法逐條進行判斷。
遇到的問題:
1、單次查詢1W條資料時只需要140毫秒左右的時間,但連續取時(也就是取數-演算法判斷-取數-演算法判斷時)幾次過后取數時間就變為2-3秒。不知道原因在哪,我是通過ID進行查詢的。
2、查詢的時候就程式假死,網上查了半天,說是應該另開執行緒進行(我現在是寫在timer控制元件里的),還沒試不知道能不能解決。
有沒有更效率的方式去查詢呢?
3、執行演算法的時間有點長,且每次CPU占用率都在50%-80%左右,不知道原因,我是從TADOQuery里面讀一條算一條,然后next下一條再算。查了一下,說是應該先放在陣列中,還沒試,不知道是不是因為這個原因。
以上就是我遇到的幾個問題,煩請各位大神幫我解惑一下。
uj5u.com熱心網友回復:
資料表的變化如果需要很高效率、最好實時的要求的,一般不應該在程式中設定,建議在資料庫中建立存盤程序,利用資料更新觸發事件通知程式用你的演算法的話,我是資料庫管理員,我會直接將你的IP DROP了
uj5u.com熱心網友回復:
資料庫不更新的,都是已經記錄下來的資料,而且資料庫我沒有權限改的= =。uj5u.com熱心網友回復:
資料庫不更新的,都是已經記錄下來的資料,而且資料庫我沒有權限改的= =。
uj5u.com熱心網友回復:
建議使用一個專門的存盤程序完成此事!uj5u.com熱心網友回復:
你搞個快取佇列之類的,把一次取出來的資料放在快取里 把快取里的資料處理完 再去讀取資料庫uj5u.com熱心網友回復:
樓主的需求我和以前碰到的一個問題類似:有一個商業版的業務軟體,需要對其資料進行某種統計,顯然不能更改原始資料。解決方案:在sql server增加一個存盤程序來統計,這樣不會對原始功能有任何影響,而且效率絕對沒有問題。
uj5u.com熱心網友回復:
大資料的瀏覽,沒有捷徑。獲取的欄位越少越好(快)。uj5u.com熱心網友回復:
導到自己的資料庫里想怎么做都可以,嘿嘿uj5u.com熱心網友回復:
1.把自己的演算法屏蔽,只回圈取數,確定卡在哪2.如果卡在自己的演算法,timer開始加入 timer.enabled:=false;結束加入timer.enabled:=true;
uj5u.com熱心網友回復:
建議資料匯出至自己的庫中,同意樓上的分析uj5u.com熱心網友回復:
1.如果你查詢資料不怕影響到別人使用資料庫,一個select命令就能把你所需要的結果全部查到了,根本不需要寫什么Delphi程式,反正判斷一個記錄是否例外你是有判斷條件的。2.如果一定要用delphi寫程式來判斷,先確定一下是否服務器慢還是程式慢。直接執行一下程式發到服務器的sql命令,如果沒有出現慢的情況,就證明不是服務器的問題而是程式問題。
3.如果是程式問題,建議用sdac試試,不要再用ado了。這個論壇里面還有很多人在用ado、bde這類古董,實在令人困惑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41313.html
標籤:數據庫相關
上一篇:求大神幫助,謝謝,不勝感謝!
