有效利用索引和SQL构造,成功解决性能问题的经验

有效降低以下SQL语句在统计大数据量时的效率,将使系统的性能体验更上一个层次,试验证明通在大数据量表中创建Trddt、updateid、UPDATESTATE的非聚焦索引以及改进SQL语句的构造,对于检索数据统计功能的SQL语句有质的提高,试验证明一次查询可以在4s内完成

/*

    测试环境:将数据拷贝到本地,进行调试测试(测试环境不是在100.206上面,我把1.01G的数据全拷贝到本地了)

    数据库:CSMAR_WebData

    表名:TRD_Dalyr ,csmar前台系统上是日个股回报率文件的一部分

    本地测试表的数据量:1.01G,共计条记录3992396

   

    测试方法:1.先执行清除数据库相关缓存的操作

             2.执行原始方法,耗费时间s左右

3.对字段Trddt(字符型)updateid(字符型)UPDATESTATE(int)建立非聚焦索引

            4.执行清除数据库相关缓存的操作

            5.执行新创建的Sql查询,耗费时间在s左右

            

    结论:在大数据表中创建TrddtupdateidUPDATESTATE相对于的非聚焦索引,对于检索数据统计功能的SQL语句有质的提高

   

*/

 

 

/* 清除数据库相关的缓存,以保证用户处于第一次访问的状态,在执行SQL前都应该执行这个操作*/

DBCC DROPCLEANBUFFERS

DBCC FREEPROCCACHE

 

--原始方法:共耗费时间s

select 'TRD_Dalyr'as TableName,count(1)as TotalCount from TRD_Dalyrwhere1=1 and[Trddt]

BETWEEN '2002-03-01'AND'2022-03-24' and(TRD_Dalyr.updatestate<>2)

 

--方法二:

--步骤一:对字段TrddtupdateidUPDATESTATE建立非聚焦索引

create index index_Trddton TRD_Dalyr(Trddt)

create index index_updateidon TRD_Dalyr(updateid)

create index index_Stkcdon TRD_Dalyr(UPDATESTATE)

--步骤二:使用以下方法进行查询,耗费时间在4s左右

SELECT     'TRD_Dalyr' ASTableName,COUNT(updateid)AS TotalCount

FROM   dbo.TRD_DalyrWHERE (UPDATESTATE<2or UPDATESTATE>2)and [Trddt]BETWEEN'2002-03-01'AND '2022-03-24'


索引注意在查询字段上面进行更改和添加。

SELECT     'TRD_Dalyr' AS TableName, COUNT(1) AS TotalCount
FROM   dbo.TRD_Dalyr  WITH(INDEX=index_Stkcd) WHERE  (UPDATESTATE<2 or UPDATESTATE>2) and [Trddt] BETWEEN '2002-03-01' AND '2022-03-24'  --3518556 --3992396 这样也可以,感受好像要快一些。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那美那美

失业了,写文章求吃碗炒面

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值