線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1963
推到 Plurk!
推到 Facebook!

限制筆數

尚未結案
chengwenlien
一般會員


發表:11
回覆:16
積分:5
註冊:2004-01-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-06 12:18:14 IP:218.18.xxx.xxx 未訂閱
因資料量龐大,每當修改某一欄位時,都要等SQL漏斗很久..... 是否有什麼好辦法可改善此問題,多謝各大大指導
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-06 14:20:46 IP:203.66.xxx.xxx 未訂閱
只修改某一欄位的話應該不會造成太大的 overhead... 不知道您指的是不是 Refresh 畫面的時候造成的?? 如果是的話,試看看利用 SQL command 分頁顯示,看會不會好一點?? 如果是指 SQL 執行效率的話,試看看 Batch 的方式執行 SQL.. 類似 BDE 的 TQuery TUpdateSQL 的效果,要在 ApplyUpdates 時才會真正執行對 DB 的動作,否則是 cache 在 Local 的... ---- 我只會兩件事,這也不會,那也不會
chengwenlien
一般會員


發表:11
回覆:16
積分:5
註冊:2004-01-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-06 16:05:26 IP:218.18.xxx.xxx 未訂閱
請教SOUTH WIND兄 何謂SQL command 分頁顯示?
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-06 16:44:05 IP:61.218.xxx.xxx 未訂閱
引言: 如果是指 SQL 執行效率的話,試看看 Batch 的方式執行 SQL.. 類似 BDE 的 TQuery TUpdateSQL 的效果,要在 ApplyUpdates 時才會真正執行對 DB 的動作,否則是 cache 在 Local 的...
講到 ApplyUpdates 我有切身之痛(其實我不會痛,是客戶在痛), 因為我是新手,沒寫過這個東東,我還以為 update 執行過就沒事了, 於是就交差了,結果客戶用一個禮拜後就打電話來跟我講資料都消失了, 我在 說怎麼可能都消失了?? 結果結果..最後的原因正是 cache 在作怪.. 資料都在記憶體內,根本沒存入,當時我是新手第一次寫,根本不知道這 件事,查了很久最後原因才找到,當然我也是死不承認是我的錯。 而客戶有多痛??他大概輸入了400多筆資料都消失了?因為電腦都沒關機,所以 都沒事,結果假日一關機,隔週上班才發現資料都沒了..而且資料消失是 消失兩次(第二次就沒那麼多筆了)..夠痛吧?
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-06 17:15:37 IP:203.66.xxx.xxx 未訂閱
引言: 請教SOUTH WIND兄 何謂SQL command 分頁顯示?
以下這是 mysql 的分頁語法,利用改變 LIMIT $begin $page_num 的值達到分頁的功能 (Ex: 每頁 20 筆資料) "SELECT * FROM $datatable ORDER BY id DESC LIMIT $begin,$page_num" 我記得 MS SQL 與 Oracle 是用另外一種方法 (不是直接下 SQL Cmd),但是原理都是一樣的,螢幕 (或目的) 沒有要顯示出這個多筆資料,就不要 select 出來 (或顯示),每次顯示 N 筆,透過 TDBGrid scroll event,來顯示新紀錄(要計算) ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-07 08:17:47 IP:218.163.xxx.xxx 未訂閱
引言: 因資料量龐大,每當修改某一欄位時,都要等SQL漏斗很久..... 是否有什麼好辦法可改善此問題,多謝各大大指導
chengwenlien 你好: 如果下 Update Command 就要等很久, 我想即使分頁取資料, 應該也不會有太大幫助, 只會讓 Open 快一些, 我的建議是: 1. 調整 Index( 多餘的 Index, 反而會造成 Data 異動變慢 ). 2. Data/Index 置放於不同的儲存空間(Oracle:Tablespace; MSSQL/Sybase:DataDevice). 3. 切割資料表( Partition Table ).
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-07 08:53:44 IP:210.65.xxx.xxx 未訂閱
Hi,chengwenlien 你好: 我贊同 Mickey 大大的說法,Update Command 的等待時間應該與資料量無關,建議你從 DataBase 中著手進行 Tuning 除 Mickey 大大的幾點建議外,你也可以 1.檢查你要 Update 的 Table 是否有適當的 Index 2.如果你的 DataSet 資料是來自於 TQuery,將與Index 有關的欄位一併 Select 出來(即使你不會去異動它,甚至不允許異動) 大家一起加油 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
chengwenlien
一般會員


發表:11
回覆:16
積分:5
註冊:2004-01-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-07 10:45:01 IP:218.18.xxx.xxx 未訂閱
我試過加入Index後,scroll roll可以快一些 但Apply Update還是慢 但因本表有備註欄位,也有BLOB欄位 是否是這種影響 另外SQL SERVER 7中可以下south wind兄提道的SQL COMMAND嗎? 謝謝指導
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-07 14:53:56 IP:203.66.xxx.xxx 未訂閱
引言: 我試過加入Index後,scroll roll可以快一些 但Apply Update還是慢 但因本表有備註欄位,也有BLOB欄位 是否是這種影響 另外SQL SERVER 7中可以下south wind兄提道的SQL COMMAND嗎? 謝謝指導
這樣看起來應該是卡在 SQL Server 上, Mickey 版主與 Fishman 的方法才是正本清源的王道,試看看 Mickey 版主的建議,重新分析(也許正規化是一個方向),將要 Update 的 Table 切開 (即 Mickey 版主建議的 3. 切割資料表),不過這會付出很大的代價 (程式碼會受影響),取捨就您個人了... LIMIT 是 MySQL 的一個 "特異功能" ,我記得 MS SQL 不是直接下 Command 的方法,(在 ASP 的 ADO 中的 Recordset 提供的分頁控制,使用AbsolutePage,PageSize,PageCount等屬性),這可能要請教有經驗人了,資料庫我的程度只是門外漢... 誠如 Mickey 版主所言,分頁只能讓您的顯示速度加速而已,對 Update Command 就要等很久的狀況並無明顯幫助... ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-07 16:42:30 IP:218.163.xxx.xxx 未訂閱
補充一下, 我所謂 資料切割(Partition Table), 並不是拆 Table 喔, 是指 一個 Table, 存於多個 "儲存空間", MSSQL 應該有這種機制, MSSQL 7.0 說明找找看, 我只有 MSSQL 2K....
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-07 23:20:21 IP:211.76.xxx.xxx 未訂閱
引言: 補充一下, 我所謂 資料切割(Partition Table), 並不是拆 Table 喔, 是指 一個 Table, 存於多個 "儲存空間", MSSQL 應該有這種機制, MSSQL 7.0 說明找找看, 我只有 MSSQL 2K....
可否請 Mickey 版大詳述一下?? 給我這井底之蛙開開眼界 ... 在此先致歉,誤會您的意思了... ---- 我只會兩件事,這也不會,那也不會 ---- 眼見不一定為真
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-01-08 02:27:12 IP:211.74.xxx.xxx 未訂閱
這個問題其實沒啥好討論的,因為這是資料庫引擎效能的特性,當資料量小時 都不會有差別,但當資料超過20萬筆時,資料庫引擎的好壞漸漸可以比較出來了,像paradox就蠻爛的,那個access我不把他當成是資料庫,所以不討論, 那個access其實也蠻爛的。 OK..那要怎樣加快這些速度??還是有幫助的, 第一,當然就是在特定的欄位加上index,暫時刪除用不到的 index。 第二、加快你的硬體設備,例如把RAM加大,或者把硬碟的DMA模式開啟, 這些幫助都會非常的大..,至於加快CPU速度沒用的,要加快CPU不如加 多CPU數量,而且要使用支援多執行序的系統才有效。 第三、程式碼部分當然也有技巧,這些技巧我已經三番兩次在別的文章內容寫 過了,只要用到資料庫,這些技巧都永遠有效,怎樣修改?就是關閉跟元件連結 ,你只要下一道指令 Query1->DisableControls(); 只要寫這一行而已,你就會 發覺速度差異性真的很大。如果你有用到迴圈(while...),而且這個過程非常非常久(短暫的話就別加),在這裡面加上 Application->ProcessMessages(); 這一行也會加快速度(很神奇吧?大家會認為會變慢,但經過實驗就是會加快, 因為你把資源釋放出來,讓程式去處理別的事情,不把資源咬死,系統就不會 一直在排程上互相打架了)。 我暫時只有想到這些,以後有想到再補上,程度不夠,如果內容有錯誤,還請 各位指正。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-01-08 08:41:27 IP:218.163.xxx.xxx 未訂閱
引言: 可否請 Mickey 版大詳述一下?? 給我這井底之蛙開開眼界 ... 在此先致歉,誤會您的意思了... < face="Verdana, Arial, Helvetica"> 因為"分割資料行"這個主題, 說明內容資料滿多的, 詳請參閱 SQL Server 線上說明, 會比較清楚. 大致上看了一下 SQL Server 與 Oracle 的分割資料觀念有一些差異, 建置程序也較複雜(透過 View 去 union Table), 而 Oracle 只須於 Table Create 時, DDL 中加以指定便可以, 如 : CREATE TABLE [TableName] ( ID integer not null, ... ) PARTITION BY RANGE (ID) (PARTITION [PartitionName] VALUES LESS THAN (MAXVALUE)); 當資料大到某一程度時, 可將 Table Partition 切割, 如 alter table [TableName] split partition [MainPartitionName] at (30000) into (partition [Partition30K],partition [MainPartitionName]); PS. MSSQL 的 select SQL 可下 Top xxx ,如 :select top 10 * from sysobjects MySQL 我不熟, 不過我想這跟 MySQL "LIMIT" 應該有點像. 發表人 - Mickey 於 2004/01/08 08:51:51
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-01-08 08:58:44 IP:211.22.xxx.xxx 未訂閱
您好: 您也可以select 某ㄍ日期之後的資料
系統時間:2024-11-23 6:47:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!