大数据时使用索引实例

3 篇文章 0 订阅
2 篇文章 0 订阅

本文是根据 海量数据库的 查询优化及分页算法方案 做的实验,不知为何,同样的数据量时间却比原文少了将近百倍,由于插入数据耗时时间过长,所以只能勉强得出结论,大致还是准确的,可适当增加数据

CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名  
[Gid] [int] IDENTITY (1, 1) NOT NULL , 
--本表的id号,也是主键  
   [title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,   
--红头文件的标题  
   [fariqi] [datetime] NULL , 
--发布日期  
   [neibuYonghu] [varchar] (70) COLLATE Chinese_PRC_CI_AS NULL , 
--发布用户  
   [reader] [varchar] (900) COLLATE Chinese_PRC_CI_AS NULL ,  
--需要浏览的用户。每个用户中间用分隔符“,”分开  
) ON [PRIMARY] 
GO  


delete from TGongwen


declare @i int  
set @i=1  
while @i<=250000 
begin  
    insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-2-5','通信科'
    ,'通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,
    户政科,治安支队,外事科','这是最先的25万条记录')  
    set @i=@i+1  
end  
GO  
 
declare @i int  
set @i=1  
while @i<=250000 
begin   
    insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-9-16','办公室',
    '办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科
    ,外事科','这是中间的25万条记录')  
    set @i=@i+1  
end  
GO  
 


declare @h int  
set @h=1 
while @h<=100  


begin  
declare @i int  
set @i=2002  
while @i<=2003   
begin  
declare @j int  
        set @j=0  
        while @j<50  
            begin  
declare @k int   
            set @k=0  
            while @k<50  
            begin  
    insert into Tgongwen(fariqi,neibuyonghu,reader,title) values(cast(@i as varchar(4))
    +'-8-15 3:'+cast(@j as varchar(2))+':'+cast(@j as varchar(2)),'通信科',
    '办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,
    外事科','这是最后的50万条记录')  
            set @k=@k+1  
            end  
set @j=@j+1   
        end  
set @i=@i+1  
end  
set @h=@h+1
end   
GO  
 
declare @i int  
set @i=1  
while @i<=9000000
begin  
    insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-5-5','通信科',
    '通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,
    户政科,治安支队,外事科','这是最后添加的900万条记录')  
    set @i=@i+1000000  
end  
GO  


 DROP INDEX list1 ON TGongwen  


--表扫描:发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次,2953
select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> '2002-8-16' 


--聚集索引扫描:发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHERE Id > 10)等操作时,效率会较好,2854
CREATE CLUSTERED INDEX list1 ON TGongwen(Gid) 
select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> '2002-8-16'


--聚集索引查找,扫描聚集索引中特定范围的行.1476
CREATE CLUSTERED INDEX list1 ON TGongwen(fariqi) 
select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> '2002-8-16'


--索引扫描,能够覆盖所需要的数据。如果非聚集索引不能覆盖,使用聚集索引扫描。
CREATE INDEX list1 ON TGongwen(fariqi)
select fariqi from Tgongwen
select * from  Tgongwen


如果没有聚集索引,使用表扫描

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值