这种表结构怎么高效的起来?
写存储过程:
原来的表名:table_a
先insert into table b select distinct * from table_a (会产生一个和table_a结构相同的表)
然后
delete from table_a;
最后
insert into table_a select * from table_b
写存储过程:
原来的表名:table_a
先insert into table b select distinct * from table_a (会产生一个和table_a结构相同的表)
然后
delete from table_a;
最后
insert into table_a select * from table_b
解决方案 »
- [求教:SQL语句]
- 字符串拆分问题
- 求1SELECT语句,立刻结帖.
- 有些关键字在查询分析器中不能用,请指教
- downfile("网址,d:\photo\变量名\"),这个如何由变量生成目录?(mysql语法)
- 有关SQLConfigDataSource
- 请教数据库的"等待类型"
- 两个记录集横向合并的问题!!!!!!!!!!!!!!!!!
- 各位仁兄:请相告!哪能下到SQL的图书。尤其是DB LIBRARY FOR VB 的书
- sql server 中的不存在和访问被拒绝 请指教应该如何解决,急急!进者有分
- 请问怎么读出第五十到一百条记录,SQL怎么写,新手,谢谢
- SQL SERVER的卸载。。。。(急急急!!!)
这样还得建一个表,再删一个表,而且,把表中数据几乎都复制了一遍。
但是,我这个表中有50万条记录(不包括重复!),而且,有若干表都是这样。
你难道要我都copy一次?再删除一次?
create procedure sp_cleardata
as
begin
begin tran
insert into table b select distinct * from table_a
commit tran
begin tran
delete from table_a
commit tran begin tran
insert into table a select * from table_b
commit tran
end
虽然调用存储过程,就算你存储过程可以反复调用,还是要进行insert操作的。
能不能直接删除多余的?
能够直接delete就快多了。
你开始说出的这个办法我会,不过就是感觉慢。
求解决方案!
go
drop table table_a
go
sp_rename table_b,table_a
go
csdn藏龙卧虎,我相信一定能够搞定这个问题的!
时间问题。我等等等等等等等等等等等等等等等等等等等等等等等!
lovesong() 的方法会慢吗?你看一下到底是哪个环节慢?改一点点create procedure sp_cleardata
as
begin
begin tran
insert into table #b select distinct * from table_a delete from table_a
insert into table_a select * from #b
commit tran
end这种方法已经够快了!直接删除,也要进行大量的比较
的确应该写在一个trans里面。
还有#b生成的是临时表吧?(重启会删掉)
Drop table 是不能够恢复的。所以,大家研究一下,在事务处理中,这样用回不回出问题?比如不能回滚?
完全满足!
不过,
在性能上,我原来一直认为写磁盘(读磁盘快)要慢很多,我假设有1000个表(夸张),而且,每个表都有几十万条记录,每个表都象我描述的那样,需要处理。
这样,光复制就需要很长时间啊。这个写磁盘的过程可是了不得!很恐怖的。
而且,系统又不能中断服务,还不能让数据库服务器忙于干这个,以至于别的操作无响应。
所以我说“不满足”是“从性能上”不满足。
那个“Drop table” 不像别的操作(比如delete table)可以用日志回滚。
drop是没有日志记录的!
这样,你又没有使用事务处理,所以很恐怖!
仅此而已。大家继续!
delect from mytable x
where rowid <> (select max(rowid)
from mytable y
where y.field1 = x.field1
and y.field2 = x.field2
.....
);在SQL SERVER中有没有类似的方法?
我这个表没有ID,所以你那个max(rowid)不知道是否有用
而且重复记录是“完全重复”,而且不知道重复次数。你看看本贴最前面例子。
所以,好像不行啊。
TO leeyoong(莫西):
不带外键好像不可能啊。
我这里这么多表,肯定有一个表管理这些表的。(记录表名以及其功能,内容的分类……)
现在已经不恐怖了。我是说 你原来没有提及事务处理。
视图?你突然提到这件事,我牙齿还没刷呢!
你是说用视图得到结果,而不需要实际处理重复值?
那样以后冗余越来越多啊。
可能理解偏差,望明告之。
RowID是Oracle的伪例,对于每一个表,系统自建的
对于Oracle,我认为KingSunSha的方法很不错
我的QQ号:26357609(需要验证)
也有道理!
好,结束这个话题,给分喽!