是否所有SQL服务器版本自动重建索引或具有默认重建条件?我知道统计信息会自动重建,但不知道索引是否也可以。是否所有SQL服务器版本都会自动重建索引或具有默认重建条件?
回答
任何版本的Microsoft SQL Server都不会自动支持重建索引 - 原因是重建索引可能是非常昂贵的操作,因此需要仔细安排和规划。
在许多环境中的特殊脚本将被写入处理这个问题,例如:
http://weblogs.sqlteam.com/tarad/archive/2008/09/03/Defragmenting-Indexes-in-SQL-Server-2005.aspx
注意的是,虽然SQL可以自动在很多情况下更新您统计有要由有性能增益以及更仔细地管理这些。
我看到你的答案是从2009年,这是仍然有效的SQL Server的新版本? – 2012-11-01 17:37:43
它必须安排和安排你自己。
分类时,取决于表格和维护窗口的大小。
此外,重建索引时会自动重建统计信息,但可以分别计划。
快速修复,假设一个不错的长期维护窗口并没有太大(高达几百GBS),只是安排此:
EXEC sp_msforeachtable 'SET QUOTED_IDENTIFIER ON ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90)'
编辑:只为> SQL 2005这SQL
正如@Chris所述,索引不会在任何SQL Server版本中自动重建。在没有专门的数据库管理员角色的站点上经常缺少适当的索引维护,并且通常在数据库从开发移到生产时(以及事务日志维护)通常都会丢失。
SQL Server 2005+有能力进行在线索引重组和离线完全重建。
正如人们在这里提到的,您的索引不会自动重建。这在SQL Server中是一个相当大的问题,因为索引会随时间而分段。你可能发现你的索引是95%加碎片,严重影响了查询性能。
下面是一个简单的查询,以检查你现有的索引碎片:
DECLARE @DBNAME VARCHAR(130);
SET @DBNAME = 'MYDBNAME';
DECLARE @DBID INT;
SET @DBID = DB_ID(@DBNAME);
SELECT
OBJECT_ID AS objectID
, index_id AS indexID
, avg_fragmentation_in_percent AS fragmentation
, page_count
INTO #indexDefragList
FROM
sys.dm_db_index_physical_stats
(@DBID, NULL, NULL , NULL, N'Limited')
WHERE
index_id > 0
OPTION (MaxDop 1);
SELECT
i.[name] as indexname,
d.fragmentation,
d.page_count
FROM
#indexDefragList d
INNER JOIN sys.indexes i
ON d.objectid = i.object_id
ORDER BY
d.fragmentation DESC
DROP TABLE #indexDefragList
这将在当前的数据库返回的所有索引的列表以及它们在%的碎裂。
您可以轻松构建脚本以自动重建或重新组织它们。有一个great article from SQLFool on this包括一个完整的预制脚本。
要展开什么克里斯说:
关于统计,不包括在索引列将不会有他们的统计资料,重建所有索引进行更新。它们可能会定期由SQL Server更新,但您可能需要使用UPDATE STATISTICS语句自行完成此操作。
SQL Server 2005决定是否根据列修改计数器(colmodctrs)的更改自动更新统计信息。
甲统计对象被认为是过期的在下列情况下:
1.表的大小已经从0去> 0的行。
2.号码表中的行的,当统计聚集为500或更小,并且从那以后,统计对象的前柱的colmodctr已超过500改变。
3.收集统计信息时,该表有超过500行,并且统计信息对象的前导列的colmodctr在统计信息中发生了变化超过表格中行数的500 + 20%聚集
你会发现关于使用统计如下参考:
http://blogs.technet.com/rob/archive/2008/05/16/sql-server-statistics.aspx
希望这有助于但随时提出进一步的查询。
干杯,约翰
- 1. 重建索引后自动重启sql服务器
- 2. 重新启动CF服务器是否会将所有人都注销?
- 3. 重组/重建单索引与所有表索引
- 4. 我是否需要重建我的SQL服务器数据库索引?
- 5. 使用T-SQL重建SQL Server 2005中的所有XML索引
- 6. 构建服务器(CI服务器)上的构建或重建
- 7. 如果列重命名,MySQL是否会重建列索引?
- 8. 重建SQL索引 - 何时?
- 9. WaitForMultipleObjects()是否重置所有自动重置事件?
- 10. Lotus脚本重建索引
- 11. 多“OR” WHERE子句中具有重复的默认条件
- 12. 手动重建pycharm索引
- 13. 是否有可能只用carrierwave重新创建特定版本?
- 14. 为elasticsearch中的所有索引创建默认索引模板5.2
- 15. C#默认值重置自身建设
- 16. 什么是Xcode 9.0版测试版的默认Swift自动建议版本?
- 17. 是否有任何数据库支持自动索引创建?
- 18. 是否有CakePHP安装的索引页的默认控制器?
- 19. ASP.NET不会自动重建
- 20. 是否有可能在聚簇索引重建中重命名表?
- 21. 删除并重新创建所有约束结合sp_MSForEachTable sql服务器
- 22. Solr的黑子 - 重建索引对象不会自动运行
- 23. SQL Server:是否有可能为IS NULL条件创建非聚集索引
- 24. GNU Autotools:重建没有版本信息
- 25. 如果else子句在SQL中,索引的自动重建
- 26. 在复制服务器上重建索引
- 27. SQL服务器索引创建vs启用索引
- 28. NHibernate.Search索引重建
- 29. zend_search_lucene重建索引
- 30. SQL服务器是否自动更新?
我不认为统计数据自动重建 - 当索引重建他们重建,或者通过特定的命令。维护向导将让你设置一个合理的“启动器”数据库维护计划,但对于更大的/繁忙的数据库,你可能需要建立一些更复杂的 – Kristen 2009-02-24 14:10:31
见我的回答对有关统计数据在SQL Server中如何工作的详细信息。 – 2009-02-24 16:18:28