如何解決資料表中資料量越來越多的問題? |
答題得分者是:malanlk
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
scotthsiao
高階會員 發表:13 回覆:324 積分:147 註冊:2005-02-01 發送簡訊給我 |
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
xu_caishen
一般會員 發表:6 回覆:20 積分:5 註冊:2005-04-15 發送簡訊給我 |
引言: 我的表中有一個日期時間字段,我希望能自動地每一周(或每一月)創建一個表,用來存放歷史記錄。 另外請各位高人給個詳細的實現步驟,想我也會想。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------試一下以下方法: 建一個同樣結構的數據表(table2,假設你原來的表為table1); Insert into table2 select * from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式 但是有一個問題應該注意,如果表中有自動編號字段,就必須列出字段名如下: Insert into table2(字段列表,自動編號字段除外) select (字段列表,自動編號字段除外) from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式 |
xu_caishen
一般會員 發表:6 回覆:20 積分:5 註冊:2005-04-15 發送簡訊給我 |
引言:如果要自動的話,可以設置一個時間表,然後采用一個Timer控件。每次打開系統的時候都做檢查。 這是我的想法,請參考。引言: 我的表中有一個日期時間字段,我希望能自動地每一周(或每一月)創建一個表,用來存放歷史記錄。 另外請各位高人給個詳細的實現步驟,想我也會想。 ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------試一下以下方法: 建一個同樣結構的數據表(table2,假設你原來的表為table1); Insert into table2 select * from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式 但是有一個問題應該注意,如果表中有自動編號字段,就必須列出字段名如下: Insert into table2(字段列表,自動編號字段除外) select (字段列表,自動編號字段除外) from table1 where 日期時間段表達式 Delete from table1 where 日期時間段表達式 |
shine5188
一般會員 發表:2 回覆:15 積分:8 註冊:2005-05-11 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
既然有歷史資料的概念, 那就用 ALTER TABLE ...RENAME... 的方式就不必花搬資料的時間了. 至於 如何管理接踵而來的資料庫, h@visli 大大應該沒問題吧 如果資料是 7-24 的流向資料庫, 那就在 Table 名稱做更細的規劃, 而且新的table 在資料即將流入前就準備好 (Create table 不花時間吧) 並在 SQL 裡面動手腳, 依時間動態組出新 table 名稱, 在適當的時間將資料轉向新 table 至於收集到資料的 table 就有時間慢慢處裡了... 這方法 想也會想, 做也不難吧.......
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
感謝以上各位的熱心幫助。因為最近事情多,沒來得及考慮這個問題。 xu_caishen兄的作法可能跟我希望的解決方法有出入,如果用程式來做簡單多了。 我希望在資料庫管理中來完成這個處理歷史資料的操作。malanlk大大的思路我以前也想到過,我是想通過觸發器來完成,大致思路如下:
CREATE TRIGGER [synhis] ON [dbo].[Dynamic] FOR INSERT AS declare @n varchar(50) set @n= replace((convert(varchar(7), getdate(),120)), '-', '') if not exists (select * from sysobjects where xtype='U ' and name= @n) begin exec('create table SynBak' @n ' (aaafield varchar(30))') end exec('insert into SynBak' @n ' select * from inserted')假設表Dynamic就是插入即時資料的資料表,每個月新建一個表來存放當月的歷史資料,表名就以'200508'樣式來命名。 在每次往Dynamic資料表中插入一條資料記錄時,檢查是否存在當月的歷史表,如果不存在則先創建該表,再把新插入的資料記錄照樣插入一條到當月的歷史表中。 但這裏存在一個問題,就是執行exec('insert into SynBak' @n ' select * from inserted')這一句時,提示inserted對象名無效! 發表人 - h@visli 於 2005/08/16 15:34:48
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
引言: 6秒鐘向資料表中寫入500條, 假設 ㄧ天收資料 4 hrs, ㄧ個月大約會有 500*(60/6)*60*4*30 = 36000000, 而 Create Ttable 只有 1 次, 而且是事先可以知道的. 您的資料庫是不是太悠閒啦.... >>< face="Verdana, Arial, Helvetica"> inserted是SQL Server中內置的臨時表,用來存放(Dynamic)Insert、Update與Delphi的新舊記錄。對象肯定是存在的,衹是用exec執行時會有問題。 而我用exec來執行是因為不能直接用@n來作表名。 請詳細說一下 Sql Server Agent 如何實現? ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |