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

請問如何加快update的速度?

答題得分者是:Mickey
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-19 17:16:58 IP:211.75.xxx.xxx 未訂閱
有兩個table,tableA 筆數約66萬筆,tableB筆數約3萬筆 目前已經知道,tableB中所有筆數資料將更新到tableA, 也就是tableA更新的筆數將會跟tableB一樣。 有沒有方法能在tableA更新前先篩選出將要更新的資料, 再讓它們跟tableB的資料比對更新?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-19 17:35:18 IP:218.16.xxx.xxx 未訂閱
假設TableB 的 Primary Key 是ID, 而這個 ID 也是存在於 Table A 的 select * from TableA where ID in (select ID from TABLE B); 這樣就會在 TableA 選出在TableB 會出現的數據。 可以這個 select 應也是頗慢的但你可試試。
kadee
高階會員


發表:11
回覆:141
積分:165
註冊:2002-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-19 17:41:35 IP:203.69.xxx.xxx 未訂閱
select * from tableA where exists( select 1 from tableB where tableA.id = tableB.id) 建議tableA.id,tableB.id 都建INDEX 應該會滿快的 Kadee_BigRed
------
Kadee/BigRed Ent.
www.tw165.com
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-19 17:47:37 IP:211.75.xxx.xxx 未訂閱
請問這樣的句法可以跟 update..set合併使用嗎? 若不行,是否要建立一個view?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-19 18:54:24 IP:218.16.xxx.xxx 未訂閱
你究竟想在 Delphi 讀出 2個 table 的資料然後對比更新還是要找用tableB 來更新 tablea 的語法丫? 前者的話,剛才己提出了 tableA 的語法。 後者的話,你可試試 update tableA, tableB set tableA.Field1 = tableB.Field1, tableA.Field2 = tableB.Field2,... where tableA.Key1 = tableB.Key1 and tableB.Key2 = tableB.Key2... 這應可直接將 TableB 的資料更新更 TableA 我不知道這是不是標準 ANSI-92 SQL,但在 MySQL 是可行的,你可試試。
Mickey
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-20 09:11:55 IP:61.219.xxx.xxx 未訂閱
1. 請先說明用何種資料庫
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-20 10:19:48 IP:211.75.xxx.xxx 未訂閱
我用的是SQL Server 。 目前使用的SQL如各位說的一樣, UPDATE TableA SET fielda = TableB.fielda FROM TableA,TableB WHERE TableA.fieldb = TableB.fieldb AND TableA.fieldc = TableB.fieldc AND TableA.fieldd = TableB.fieldd AND TableA.fielde = TableB.fielde fieldb~fielde 目前沒有建index。 因為速度蠻慢的(大概10-13秒),所以想知道大概怎樣做可以增加效率
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-20 10:33:56 IP:218.16.xxx.xxx 未訂閱
單從 SQL 來看,隨了建 index 外應沒辦法增加速度了罷... 其他可能影響的是 1. MS-SQLServer 的 Service pack 3 (本站的 SQL Server 在站長這兩天更新後變快了)。 2. RAM, CPU, 硬盤速度/串聯 等等
Mickey
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-20 10:39:46 IP:61.219.xxx.xxx 未訂閱
引言: 我用的是SQL Server 。 目前使用的SQL如各位說的一樣, UPDATE TableA SET fielda = TableB.fielda FROM TableA,TableB WHERE TableA.fieldb = TableB.fieldb AND TableA.fieldc = TableB.fieldc AND TableA.fieldd = TableB.fieldd AND TableA.fielde = TableB.fielde fieldb~fielde 目前沒有建index。 因為速度蠻慢的(大概10-13秒),所以想知道大概怎樣做可以增加效率
一次 update 30000 筆 , 10-13秒 不錯了. 如果有必要 where condition 加 TableA.fielda != TableB.fielda /* Free 和 Create 一樣重要 */
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-20 11:46:09 IP:211.75.xxx.xxx 未訂閱
謝謝大家的幫忙,目前大概可以進步到7-9秒UPDATE完。 只是之前,使用者反應說UPDATE時電腦整個停住了,不知道現在這樣他能不能接受 另外就是 TableA.fielda != TableB.fielda 有時候會出現語法錯誤的訊息?! 改成 TableA.fielda <> TableB.fielda 再改回 TableA.fielda != TableB.fielda 卻又ok了
系統時間:2024-11-23 4:04:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!