全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5294
推到 Plurk!
推到 Facebook!

如何提高MS-SQL資料庫的讀取速度

答題得分者是:P.D.
leonli80
一般會員


發表:29
回覆:27
積分:11
註冊:2006-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-06 23:44:20 IP:58.34.xxx.xxx 訂閱
同樣的一支程式原來使用Paradox資料庫,現在使用MS-SQL資料庫,在同一臺機器上測試發現使用MS-SQL資料庫的程式在執行的時候CPU的占用率很大(特別是在從資料庫中取數據出來將畫面刷新、存入大量資料的時候),程式執行起來速度比較慢。

1、目前想試一下,將資料庫中部分基本資料讀入內存中進行操作,省得每次都從資料庫中讀取,看是否可以提高程式的執行速度。
2、請問基本資料在程式啓動的時候一次讀入內存中,應該以什麽形態存放。
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-07 12:58:40 IP:203.75.xxx.xxx 未訂閱
一、超頻
二、買更高頻的cpu

以上是屁話,別理我…

如果是既然是大量資料
或許可以採用分批讀取的方式來處理

MySQL有內建處理方法
DBX元件也有相關設定

ADO和MSSQL你可能要在搜尋一下囉

===================引 用 leonli80 文 章===================
同樣的一支程式原來使用Paradox資料庫,現在使用MS-SQL資料庫,在同一臺機器上測試發現使用MS-SQL資料庫的程式在執行的時候CPU的占用率很大(特別是在從資料庫中取數據出來將畫面刷新、存入大量資料的時候),程式執行起來速度比較慢。

1、目前想試一下,將資料庫中部分基本資料讀入內存中進行操作,省得每次都從資料庫中讀取,看是否可以提高程式的執行速度。
2、請問基本資料在程式啓動的時候一次讀入內存中,應該以什麽形態存放。
ycl2005
一般會員


發表:15
回覆:14
積分:5
註冊:2005-10-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-07 16:23:36 IP:211.75.xxx.xxx 訂閱
1.請問你是用什麼方式連MSSQL,  ODBC? ADO? BDE?
2.可以說明一下大概用到那些SQL語法, 程式的用途為何?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-07 17:56:04 IP:118.169.xxx.xxx 未訂閱
最基本的功課
1.select 限制筆數, 或縮小筆數範圍(where xxx)
2.select 少用 * (select * from xxx), 這會造成 sql 解譯的負擔, 欄位越多越明顯, 要用的欄位 select f1, f2, f3 就好了
===================引 用 leonli80 文 章===================
同樣的一支程式原來使用Paradox資料庫,現在使用MS-SQL資料庫,在同一臺機器上測試發現使用MS-SQL資料庫的程式在執行的時候CPU的占用率很大(特別是在從資料庫中取數據出來將畫面刷新、存入大量資料的時候),程式執行起來速度比較慢。

1、目前想試一下,將資料庫中部分基本資料讀入內存中進行操作,省得每次都從資料庫中讀取,看是否可以提高程式的執行速度。
2、請問基本資料在程式啓動的時候一次讀入內存中,應該以什麽形態存放。
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-10-07 18:04:49 IP:210.64.xxx.xxx 訂閱
我也補充三個:

1/ 要建立index,非常重要!

2/ update/insert時不要非常多筆,必要時分幾次下update/insert指令… (因為有rollback的問題)

3/ 若沒有太多資料同步問題,或者是單機等…建議select 指令可 加入 with no lock 的hint (詳查help或google) 「必殺技」


個人過去在某電信業者做過資料庫管理師,用的也有一部份是mssql,很沒問題 ( 你想想每分鐘有多少call一起進線…)

所以正確的使用才是重點!

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-10-07 18:07:05, 註解 無‧
leonli80
一般會員


發表:29
回覆:27
積分:11
註冊:2006-08-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-10-07 23:26:40 IP:124.78.xxx.xxx 訂閱
我是在做餐飲POS系統的,而且是網路版的(LAN網)。

1、當進入畫面的時候,要從服務器去刷新所有桌台的情況。所以有2,3個Table要做ReOpen的動作
2、當選擇某一個桌台進入時,也要去ReOpen2,3個Table以取得目前最新的桌台資料。

目前測試在資料庫資料不多的情況下,每次ReOpen的動作也會用到1秒多鍾的時間,客戶感覺有點慢。

工具: D7 資料庫:MS-SQL SERVER2000 SP4 連接方式:ADO
編輯記錄
leonli80 重新編輯於 2009-10-07 23:28:18, 註解 無‧
TWY
高階會員


發表:2
回覆:133
積分:152
註冊:2009-09-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-10-09 12:11:23 IP:211.21.xxx.xxx 訂閱
MSSQL 其實效能是不錯的,且你的應用看起來只有選出一個店點資料量,應該不大才是,我的經驗感覺一般應該都可在0.0x 秒選出。

Performance Tuning 是門學問,上面眾多前輩的經驗你可以好好思考一下,有時不能只光看一個點,硬體等級、程式寫法、外在系統環境(是否有其他系統或程式在跑)等等皆要一併考量。

你提到資料選出要做桌面刷新動作,也有可能是在那個動作佔用掉時間,你可以在程式各階段埋下 Log 抓出每一個步驟時間來觀察,釐清哪個步驟花的時間最多。

若確認了是 SQL 抓取資料花的時間最多,若願意的話將 SQL & Schema 等必要資訊 Post 上來大家可以給你些意見。



===================引 用 leonli80 文 章===================
我是在做餐飲POS系統的,而且是網路版的(LAN網)。
1、當進入畫面的時候,要從服務器去刷新所有桌台的情況。所以有2,3個Table要做ReOpen的動作
2、當選擇某一個桌台進入時,也要去ReOpen2,3個Table以取得目前最新的桌台資料。
目前測試在資料庫資料不多的情況下,每次ReOpen的動作也會用到1秒多鍾的時間,客戶感覺有點慢。
工具: D7 資料庫:MS-SQL SERVER2000 SP4連接方式:ADO
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-10-09 12:57:11 IP:118.169.xxx.xxx 未訂閱
我也寫過餐飲pos系統但失敗, 失敗原因
1.電腦處理速度不夠快, 每一筆結帳約3秒鐘(不含輸入), 櫃台人員嫌慢, 他們平均一張單1.5秒
2.假日人多, 有時電腦會有狀況, 造成前台大混亂
3.該店是牛排館
===================引 用 leonli80 文 章===================
我是在做餐飲POS系統的,而且是網路版的(LAN網)。

1、當進入畫面的時候,要從服務器去刷新所有桌台的情況。所以有2,3個Table要做ReOpen的動作
2、當選擇某一個桌台進入時,也要去ReOpen2,3個Table以取得目前最新的桌台資料。

目前測試在資料庫資料不多的情況下,每次ReOpen的動作也會用到1秒多鍾的時間,客戶感覺有點慢。

工具: D7??? 資料庫:MS-SQL SERVER2000? ?SP4??連接方式:ADO
tuga
高階會員


發表:16
回覆:109
積分:120
註冊:2002-07-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-10-11 20:47:02 IP:114.44.xxx.xxx 訂閱
可以請問為什麼會到 3 sec? 是很久以前的電腦 ?
===================引 用 P.D. 文 章===================
我也寫過餐飲pos系統但失敗, 失敗原因
1.電腦處理速度不夠快, 每一筆結帳約3秒鐘(不含輸入), 櫃台人員嫌慢, 他們平均一張單1.5秒
2.假日人多, 有時電腦會有狀況, 造成前台大混亂
3.該店是牛排館

leonli80
一般會員


發表:29
回覆:27
積分:11
註冊:2006-08-01

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-10-13 00:01:31 IP:58.34.xxx.xxx 訂閱
结帐时要计算总计、打折、税金等很多数据,然后还要写入资料库,还要列印出帐单或发票。3秒钟的时间应该很快了。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-10-14 00:03:51 IP:118.169.xxx.xxx 未訂閱
快! 那是我們自己定義的, 對店家來說, 他們人工結帳平均1張1.5秒, 相較之下, 那個快?
如果和店家一番大道理解釋, 對方是否聽的下去, 這是一個很大的問題????
===================引 用 leonli80 文 章===================
结帐时要计算总计、打折、税金等很多数据,然后还要写入资料库,还要列印出帐单或发票。3秒钟的时间应该很快了。
heartgame0
一般會員


發表:2
回覆:29
積分:11
註冊:2008-07-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-10-28 23:03:20 IP:61.64.xxx.xxx 訂閱
如果用xeon   cpu,就可以確定慢不是硬體問題!
sql server 硬體本來就要比較高。有看過4核心的,還是一樣,叫資料表出來要好幾秒,
(也有可能是sql還沒進展到4核吧,我猜的)
資料不多喔!這就跟寫法有關係了吧。唉,他是趕時間寫出來的,也沒辦法吧!我覺得啦。
-----index很重要,但是好像只有查詢、排序用到!全部資料叫出來,不知道用不用的到,我覺得這個跟叫出來的元件有關係吧。

前台要快!3秒算慢????應該不是指全部慢,發票出來就要3秒,抬頭統編(就算先印,一張發票不短喔)!
一般點餐、餐廳好像沒有用發票,好像只看過一、二家有。

人工,按計算機都要多少秒!!!手寫發票要多久呀!!!
大部份人都跟收銀機比速度!!如果剛開始用軟體當然是收銀機快,
但是,有客戶的小姐用軟體一陣子就會快的跟收銀機一樣。(軟體也可以像收銀機做法)
這時會有兩種狀況。

1、小姐會用了,但是人員流動快,換小姐又慢了!
2、一開始要說服客戶說,熟了會比收銀機快,很難說的過。(軟體可以用的資訊、統計報表比較多)
這時就要看客戶取捨了。

客戶要不會離職的人學,才會一直都很快。且客戶要重視報表、統計分析資料的,用軟體才不是浪費錢。
(我們大部份的客戶都沒有,目前只有遇到一、二個是真的善用軟體,用的很開心的)---唉!

目前電腦不能解決((((人的問題))))),用心用電腦的客戶不多,都是希望電腦萬能,希望廠商會幫客戶的電腦變成萬能。
但,我相信,會改變。已經有在進步了!!!
------
資訊業是永遠不能停止學習的行業!
但是進步都只是一點點一點點!
==可以不用理我!因為我的程度只有2成,或許不到!!
==我只會拉拉元件,打打迴圈,打打條件判斷,連連資料庫,rs232送送訊號,印表機簡單列印。
只有寫寫小小的點餐軟體(為何想寫,因為叫人家改的小東西,都ooxx,是會付錢的又不是沒錢,但是理由還是一堆)
編輯記錄
heartgame0 重新編輯於 2009-10-28 23:26:10, 註解 無‧
heartgame0 重新編輯於 2009-10-28 23:26:59, 註解 無‧
enta
一般會員


發表:34
回覆:43
積分:15
註冊:2003-09-29

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-11-09 14:05:40 IP:121.254.xxx.xxx 訂閱
1.主機os-可改用linux,資料庫可用postgresql or interbase,速度超快
2.異動資料載入時應只有部份,不是全部,如此速度應該很快.

------
chang yung chin
系統時間:2024-04-25 23:35:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!