SQL2008R2的 遍历所有表更新统计信息 和 索引重建
【2.以下是更新统计信息】
DECLARE UpdateStatisticsTables CURSOR READ_ONLY FORSELECT sst.name,Schema_name(sst.schema_id)FROM sys.tables sstWHERE sst.TYPE = 'U'DECLARE @name VARCHAR(80),@schema VARCHAR(40)OPEN UpdateStatisticsTablesFETCH NEXT FROM UpdateStatisticsTables INTO @name, @schemaWHILE ( @@FETCH_STATUS <> -1 )BEGINIF ( @@FETCH_STATUS <> -2 )BEGINDECLARE @sql NVARCHAR(1024)SET @sql='UPDATE STATISTICS ' + Quotename(@schema)+'.' + Quotename(@name)EXEC Sp_executesql @sqlENDFETCH NEXT FROM UpdateStatisticsTables INTO @name, @schemaENDCLOSE UpdateStatisticsTablesDEALLOCATE UpdateStatisticsTablesGO
UPDATE STATISTICS tblCompany -- 表名 USE tblCompany; -- 数据库名 EXEC sp_updatestats -- 更新所有表统计信息
-------------------------------------------------
【1.以下是索引重建】
摘自: http://www.cnblogs.com/shijun/archive/2012/04/21/2461737.html
项目升级数据库由SQL2000升级到2008R2,今天对数据库表进行碎片扫描,发现有些表碎片较大,于是决定重建索引,联机帮助是最好的老师,将相关脚本摘录备后查。
参考sys.dm_db_index_physical_stats
SELECTOBJECT_NAME(object_id) as objectname,object_id AS objectid,index_id AS indexid,partition_number AS partitionnum,avg_fragmentation_in_percent AS fra FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;
使用脚本中的 sys.dm_db_index_physical_stats 重新生成或重新组织索引 (来源于联机帮助)
SET NOCOUNT ON; DECLARE @objectid int; DECLARE @indexid int; DECLARE @partitioncount bigint; DECLARE @schemaname nvarchar(130); DECLARE @objectname nvarchar(130); DECLARE @indexname nvarchar(130); DECLARE @partitionnum bigint; DECLARE @partitions bigint; DECLARE @frag float; DECLARE @command nvarchar(4000); -- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function -- and convert object and index IDs to names. SELECTobject_id AS objectid,index_id AS indexid,partition_number AS partitionnum,avg_fragmentation_in_percent AS frag INTO #work_to_do FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;-- Declare the cursor for the list of partitions to be processed. DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;-- Open the cursor. OPEN partitions;-- Loop through the partitions. WHILE (1=1)BEGIN;FETCH NEXTFROM partitionsINTO @objectid, @indexid, @partitionnum, @frag;IF @@FETCH_STATUS < 0 BREAK;SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)FROM sys.objects AS oJOIN sys.schemas as s ON s.schema_id = o.schema_idWHERE o.object_id = @objectid;SELECT @indexname = QUOTENAME(name)FROM sys.indexesWHERE object_id = @objectid AND index_id = @indexid;SELECT @partitioncount = count (*)FROM sys.partitionsWHERE object_id = @objectid AND index_id = @indexid;-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.IF @frag < 30.0SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';IF @frag >= 30.0SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';IF @partitioncount > 1SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));EXEC (@command);PRINT N'Executed: ' + @command;END;-- Close and deallocate the cursor. CLOSE partitions; DEALLOCATE partitions;-- Drop the temporary table. DROP TABLE #work_to_do; GO
转载于:https://www.cnblogs.com/tohen/p/7511651.html
SQL2008R2的 遍历所有表更新统计信息 和 索引重建相关推荐
- mysql 更新统计信息_MySQL5.7统计信息更新的相关参数解释和测试
MySQL版本:5.7.21 统计信息相关参数如下: mysql> show global variables like '%stats%'; +------------------------ ...
- SQL Server 数据库表的统计信息的更新
最近在调整基础信息数据时,新增了几个客户类型,意想不到的事情发生了,在使用新增的客户类型作为 查询条件查询报表时,居然出现了超时的现象,但是用其他以前的客户类型查询就没有问题,用一个以前增加的 客户类 ...
- ORACLE索引失效,更新统计信息
有时候建立索引的时候不走索引,排除了字段数据问题和sql写法问题,索引失效的问题之外,还得考虑是统计信息过旧,得重新收集.查看表的统计信息,看 user_index 的last_analyze(索引) ...
- SQL Server 自动更新统计信息的基本算法
最初接触SQL Server的时候认为SQLServer数据更改的同时就会相应的更新统计信息,其实SQL Server不是这样做的.基于性能考虑,SQL Server使用下面的算法更新统计信息. 自动 ...
- SQL Server统计信息以及如何在SQL中执行更新统计信息
This article gives a walk-through of SQL Server Statistics and different methods to perform SQL Serv ...
- 使用数据库维护计划SQL Server更新统计信息
This article explores SQL Server Update Statistics using the database maintenance plan. 本文探索使用数据库维护计 ...
- 自动更新统计信息的阀值——人为更新统计信息的重要性
经过一系列的Insert/Update/Delete后,统计信息可能不会是最新.如果SQL Server查询优化器在表里需要指定列的统计信息,自上次统计信息创建或更新后经历了实质的更新活动,SQL S ...
- 藏在表分区统计信息背后的小秘密
藏在表分区统计信息背后的小秘密 藏在表分区统计信息背后的小秘密 原创 2017-09-19 曾令军 数据和云 云和恩墨技术专家,8年数据库运维经验.思维敏捷,擅长于数据库开发.解决棘手的数据库故障和性 ...
- oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...
如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX ...
最新文章
- 到外国的网站写英语留言
- linux 更新yum源 改成阿里云源
- Python爬虫QQ说说并分析朋友状况
- 独角兽公司 Sprinklr 获 1.05 亿美元 F 轮融资,估值 18 亿美元
- redis学习(一)
- ThinkPHP 数据库操作之数据表模型和基础模型 ( Model )
- Python中利用parse_args与namespace来简化函数传参
- 前端居中模板(常用HTML模板)
- python反向切片_Python-关于反向切片的小问题
- 学习Azure Functions:在Visual Studio 2017中创建Azure Functions
- 中挪动正请求第三方支出牌照竖立支出公司
- OJDBC版本区别nbsp;[ojdbc14.jar…
- 市场项目交接文档初稿
- 用计算机证明有限,四色定理-四色定理已利用计算机证明,但能否给出简洁的证明方法吗 爱问知识人...
- 山东省软件设计大赛参赛经验
- 5G技术演进与核心技术一(笔记)
- NVIDIA Tesla GPU系列P4、T4、P40以及V100显卡性能的对比
- 【2022】超详细的JAVA JDK配置和IDEA安装教程(Windows 版)
- 条码查询接口,商品条码和药品条码查询
- 通过WEB链接打开QQ窗体,实现与陌生人交谈的目的
热门文章
- 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
- 万网独享主机Apache为Ecshop商城添加404页面详解
- 《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇
- jQuery中this与$(this)的区别总结
- 小程序 --- Tab组件的封装
- javascript --- [jsonp] script标签的妙用(绕过同源限制)
- koa --- nunjucks
- Java Web Servlet
- 정규식 문법 정리.초급
- Difference: throw or throw ex?