新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
with t1(id,name,dqty) as (
成都创新互联专注于企业网络营销推广、网站重做改版、化州网站定制设计、自适应品牌网站建设、H5响应式网站、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为化州等各大城市提供网站开发制作服务。
select 1,'A', 2
union all select 2,'B',3
union all select 3,'C',1
),
t2(id,name,dqty) as (
select id,name,1 from t1
union all select t2.id,t2.name,t2.dqty+1 from t1 join t2 on t1.id=t2.id and t1.name=t2.name where t2.dqtyt1.dqty
)
select id,name,1 dqty from t2 order by id,name
那就分离呗,比如表名叫test,时间字段叫createtime,datetime类型的
1、先比如将2015年数据分离
select * into test_2015 from test where year(createtime)=2015
2、然后test表里把2015年数据删除
delete from test where year(createtime)=2015
如此循环弄其他年份的就好了
相当于把1个巨大的表拆分成数百个小表,特别是按照日期分,如果数据有3-5年,因为每次访问可能只是几天-几个月,这样就极大的缩少了数据范围,扫描的数据量少了,速度自然快了。。
再加上使用分区索引后,分区索引是针对单个分区表的索引,这样就会存在多个B+的索引,索引小了,维护起来自然快了,在单个分区里查询,其面对的索引树也是很小的,自然相关性能就提高了。。
sql server 2008数据库分离操作跟sql server 2005是一样的,以下具体介绍如何分离sql server 数据库:
1、打开 sql server 控制台(SQL Server Management Studio),然后登录。
2、登录时如果知道sa密码可以使用“SQL Server身份验证”模式登录,如果不知道sa密码可以使用“windows身份验证”模式登录就不需要密码登录。而sql server 2008的用户一般是在安装的时候自定义的用户,但也可以使用“windows身份验证”模式登录。
3、登录到控制到中之后,找到【数据库】点击展开,然后找到你所需要分离的数据库名称。选中数据库【右键】-【任务】-【分离】即可。
附件说明:分离数据库一般是需要将数据库拷贝到其他机器或者是移动磁盘时和不需要使用该数据库的情况下才做数据库分离。数据库一旦分离之后所对应的软件将无法正常使用和打开数据库。如果需要重新将数据库还原到数据库控制台中,选中【数据库】-【右键】-【附加】,找到你所要附件的数据所在的磁盘路径,选择以“.MDF”为后缀的文件即可。
Create function [dbo].[split]
(
@SourceSql varchar(max),
@StrSeprate varchar(10)
)
returns @temp table(line varchar(max))
as
begin
declare @i int
set @SourceSql = rtrim(ltrim(@SourceSql))
set @i = charindex(@StrSeprate,@SourceSql)
while @i = 1
begin
if len(left(@SourceSql,@i-1))0
begin
insert @temp values(left(@SourceSql,@i-1))
end
set @SourceSql=substring(@SourceSql,@i+len(@StrSeprate),len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql ''
insert @temp values(@SourceSql)
return
end
调用:Select * From dbo.split('1003,1004,1005',',')
结果如下:
100310041005
----------------------------------------------------------------------------------------------------------------------------------
--@column 表示字段或者常量,@paddingChar 表示 补位字符, @len 补位数量, @returnStr
create function [dbo].[PadLeft](@column varchar(16),@paddingChar char(1),@len int)
returns varchar(16) as
begin
declare @returnStr varchar(16)
select @returnStr = isnull(replicate(@paddingChar,@len - len(isnull(@column ,0))), '') + @column
return @returnStr
end
select dbo.PadLeft(2,0,5)