日期:2014-05-20 浏览次数:20945 次
/*
建立结构如下的分区表:
Userid int --用户ID
reason int --变更原因
money int --财富
updatetime datetime --更新时间
*/
/*
按照更新时间分区建立分区函数如下
*/
create partition function ChangeLogPF_updatetime (datetime)
as range right for values(
'20030201','20030301','20030401',
'20030501','20030601','20030701',
'20030801','20030901', '20031001',
'20031101','20031201');
/*
按照更新时间分区建立分区
*/
create partition scheme ChangeLogPS_updatetime
as partition ChangeLogPF_updatetime
all to([primary]);
/*
跟据分区函数和分区方案建立分区表
*/
Create table MOney_change_log(
userid int,
reason int,
money int,
updatetime datetime
)on ChangeLogPS_updatetime(updatetime)
/*
跟据分区函数和分区方案建立分区索引
*/
Create index idx_userid_reason on Money_Change_Log(userid,reason)
on ChangeLogPs_updatetime(updatetime)
/*
插入测试数据
userid reason money updatetime
1000 1 100 2003-01-01 11:00:00.000
1000 1 200 2003-01-31 13:23:00.000
1000 1 -50 2003-02-01 23:59:59.000
1000 1 -50 2003-03-01 00:00:00.000
*/
/*
查询各分区中的行的数量
*/
select $partition.ChangeLogPF_updatetime(updatetime),COUNT(*)
from MOney_change_log
group by $partition.ChangeLogPF_updatetime(updatetime)
/*
合并分区
*/
Alter partition ChangeLogPF_Updatetime() Marge Range('20030201')
说明:删除分区'20030201'并把数据移入下一个分区中
/*
新建分区
*/
Alter Partition SCHEM ChangeLogPS_updatetime NEXT USED [primary]
Alter partition ChangeLogPF_Updatetime() SPLIT Range('20040101')
------解决方案--------------------
大容量复制用sqlbulkcopy
create index xx on table (你要查询的字段)
------解决方案--------------------
你的数据Transfer应用应该做成后台进程的模式。如果有字段能够区分时间的先后,可以用Top XXX的方式一次读取一定数量的记录来进行移动的操作。甚至可以自己监测CPU的使用情况和内存的使用情况而在服务器“不忙”的情况下来实施Transfer工作。曾经写过一个类似的,在MS SQL Server, My SQL和Oracle等主流的数据库上都表现不错。
------解决方案--------------------
(1)怎么样才能不让他对cpu的占用率这么高?我对写入数据的时间没要求,一个小时或是两个小时完成这个操作也没关系,因为我一天只执行一次.
不要 一次 读1条, 一次操作 1000条 会快很多,
一次读一条 所有的资源 都浪费 在 建立数据库连接 读数据 关闭连接 这些上面了,
------解决方案--------------------
6万条记录查询就慢,你是不是看看服务器配置?或者是你的查询语句太过复杂?用 sql 查询分析器看看。你把两万条移走意义不大吧。
我的数据库都有一百多万条数据了,查询也不见得慢。
如果非得把那两万条记录移走,那直接用sql语句吧,不要用 ado.net。
-- delete from bookings_bak insert into bookings_bak select * from bookings where --条件-- delete from bookings where --条件--
------解决方案--------------------
楼主 我给你提供3个思路
1.建立索引(6W条其实可以不建)
2.使用存储过程执行操作
3.使用触发器
有疑问 CSDN 联系
------解决方案--------------------
1、建立索引,查询肯定会快。
2、优化查询语句不要select * from table
3、如果一定要a表导入b表,用一条语句就可以了select ... a into b,保证表结构一致,最好启用事务控制。
------解决方案--------------------
1)top 200条,写入,删除,休息1秒,再重复....时间长点,但是,不会cpu 100%