DBCC DBREINDEX 对指定数据库中的表重新生成一个或多个索引

最近在开发后台记录时,突然发现查询的数据在05-19到05-20时间段出现了超时,在Sqlserver上运行相关查询发现这个时段的查询速度慢了将近20秒,05-18到05-19 的速度慢了7秒,18号之前的数据就能达到正常水平。

起初以为是在查询语句中用了like的原因导致,发现在去掉like之后时间只缩短了2秒。之后发现我去掉时间的筛选查询总数的时间也能达到正常水平的时间,然后就把精力放到修改时间筛选这一块,但修改之后的查询时间并没有缩短,就只好将注意力放到索引的这部分,找到了一个博客DBCC DBREINDEX重建索引提高SQL Server性能

我试了一下里面说的 DBCC DBREINDEX ,重建了索引,结果05-19到05-20时间段的查询的速度变快了,时间比以前更快了一点。特此来记录一下这个 DBCC DBREINDEX 重建索引。

官方文档  微软文档上说要在后续版本删除DBCC DBREINDEX 转而改用 ALERT INDEX。

DBCC DBREINDEX( table_name,index_name,fillfactor)

  • table_name
    重新生成指定索引的表名。
  • index_name
    要重新生成的索引名。索引名称必须符合标识符规则。如果指定了 index_name,则必须指定 table_name。如果未指定 index_name 或将其指定为 ''(一对单引号),则重新生成表的所有索引。
  • fillfactor
    在创建或重新生成索引时,每个索引页上用于存储数据的空间百分比。在创建索引时,fillfactor 将替换填充因子,从而成为该索引以及重新生成的任何其他非聚集索引(因为已经重新生成了聚集索引)的新默认值。当 fillfactor 为 0 时,DBCC DBREINDEX 将使用上次为索引指定的填充因子值。该值存储在 sys.indexes 目录视图中。

参考:

DBCC DBREINDEX重建索引提高SQL Server性能

DBCC DBREINDEX (Transact-SQL)

注:

查询sql

select  id,merchant_id,title,case when (value>0 and type_name!='红包退回' and type_name!='商家红包驳回') then value else 0 end as in_amo,case when (value<0 and type_name!='红包退回' and type_name!='红包驳回') then value else 0 end as out_amo,coupons_amount,gift_amount,case when type_name='红包退回' then value else 0 end as gift_back_val,case when type_name='商家红包驳回' then value else 0 end as mer_gift_back_val,type_name,remark,add_time from

select a.id,a.merchant_id,b.title,value,uc.coupons_amount,uc.gift_amount,case when a.remark like '%红包%过期回退%' then '红包退回' else a.type_name end as type_name,a.remark,a.add_time from dt_merchant_amount_log as a left join dt_merchant as b on a.merchant_id = b.id left join dt_user_consumption uc on a.deal_code = uc.deal_code and uc.status=2

) tb  where id>0 and add_time between '2019-05-20 00:00:00' and '2019-05-21 00:00:00'  order by add_time desc,id desc

你可能感兴趣的:(数据库)