Sql server 如何在SQL Server中保存最近2个月在数据库中创建的索引

Sql server 如何在SQL Server中保存最近2个月在数据库中创建的索引,sql-server,Sql Server,在过去的两个月里,我已经在我的数据库上创建了索引。一切正常。但是,现在我必须将这些索引移动到UAT环境。我跟踪我创建的索引。但是我想确定我没有错过任何一个。如何通过查询知道在过去2个月内创建的索引 您可能需要的是通过目录视图检查数据库中的索引。也许这样的东西可以帮助你: SELECT t.name AS TableName, ind.name AS IndexName, col.name AS ColumnName, STATS_DATE(t.objec

在过去的两个月里,我已经在我的数据库上创建了索引。一切正常。但是,现在我必须将这些索引移动到UAT环境。我跟踪我创建的索引。但是我想确定我没有错过任何一个。如何通过查询知道在过去2个月内创建的索引

您可能需要的是通过目录视图检查数据库中的索引。也许这样的东西可以帮助你:

SELECT 
     t.name AS TableName,
     ind.name AS IndexName,
     col.name AS ColumnName,
     STATS_DATE(t.object_id,ind.index_id)
FROM sys.indexes ind 
INNER JOIN sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN sys.tables t ON ind.object_id = t.object_id
WHERE STATS_DATE(t.object_id,ind.index_id) > DATEADD(mm,-2,GETDATE())
ORDER BY TableName, IndexName, ColumnName

记住要在数据库中运行,您必须检查索引,而不是在主数据库中。

您可能需要的是通过目录视图检查数据库中的索引。也许这样的东西可以帮助你:

SELECT 
     t.name AS TableName,
     ind.name AS IndexName,
     col.name AS ColumnName,
     STATS_DATE(t.object_id,ind.index_id)
FROM sys.indexes ind 
INNER JOIN sys.index_columns ic ON  ind.object_id = ic.object_id and ind.index_id = ic.index_id
INNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
INNER JOIN sys.tables t ON ind.object_id = t.object_id
WHERE STATS_DATE(t.object_id,ind.index_id) > DATEADD(mm,-2,GETDATE())
ORDER BY TableName, IndexName, ColumnName

请记住,在数据库中运行时,您必须检查索引,而不是在主数据库中运行。

SQL Server不维护DMV中索引的索引创建信息。这不是您可以查询的信息

您可以获得PK、唯一索引或唯一约束的此信息

有关此主题的一些好信息,请参见Kendra Little的博客

来自肯德拉的帖子:

但是,如果您不寻找主键、唯一索引或唯一约束的创建日期,那么您就不走运了


SQL Server不维护DMV中索引的索引创建信息。这不是您可以查询的信息

您可以获得PK、唯一索引或唯一约束的此信息

有关此主题的一些好信息,请参见Kendra Little的博客

来自肯德拉的帖子:

但是,如果您不寻找主键、唯一索引或唯一约束的创建日期,那么您就不走运了


谢谢你的回复。要找到过去两个月创建的索引,确实没有什么好办法。最好的方法是将索引加载到表中,并将它们与开发人员索引进行比较。

感谢所有的响应。要找到过去两个月创建的索引,确实没有什么好办法。最好的方法是将索引加载到表中并与开发人员索引进行比较。

这里最大的问题是“我没有跟踪我创建的索引。”。这种事情对于任何从事技术工作的人来说都是至关重要的。您可以通过查询来查找不在生产索引列表中的所有索引。但是在这两台服务器之间有链接服务器设置吗?这个问题的答案将决定下一步是什么。@SeanLange-我没有链接服务器。为了更具体地回答你的问题,事实上我一直在跟踪。我只是想确保我没有错过任何机会。作为性能优化的一部分,我们创建了一些索引、删除等。我只是想确保没有遗漏任何索引。也许我应该把问题的措辞改得更好。@SeanLange-我把问题的措辞改了。你将无法按日期查看它们。但是索引创建是在默认跟踪中跟踪的,因此您可以在标准报告中查看它们。但是,如果缓冲区已满或服务已重新启动,它们将消失。在这一点上,最好的办法可能是获取生产中的索引列表,并将它们放入UAT服务器上的表中。然后对该列表和sys.indexes执行一些查询。这里最大的问题是“我没有跟踪我创建的索引”。这种事情对于任何从事技术工作的人来说都是至关重要的。您可以通过查询来查找不在生产索引列表中的所有索引。但是在这两台服务器之间有链接服务器设置吗?这个问题的答案将决定下一步是什么。@SeanLange-我没有链接服务器。为了更具体地回答你的问题,事实上我一直在跟踪。我只是想确保我没有错过任何机会。作为性能优化的一部分,我们创建了一些索引、删除等。我只是想确保没有遗漏任何索引。也许我应该把问题的措辞改得更好。@SeanLange-我把问题的措辞改了。你将无法按日期查看它们。但是索引创建是在默认跟踪中跟踪的,因此您可以在标准报告中查看它们。但是,如果缓冲区已满或服务已重新启动,它们将消失。在这一点上,最好的办法可能是获取生产中的索引列表,并将它们放入UAT服务器上的表中。然后对该列表和sys.indexes执行一些查询。这些DMV中的任何创建日期都将与索引所在表的创建日期相关。我在那里编辑了查询,它将根据索引的统计信息返回日期。它不是100%精确,但很接近。我同意它可以缩小索引列表的范围,但这将返回统计数据在过去两个月内更新的任何索引,而不是CreateDan。这些DMV中的任何创建日期都与索引所在表的创建日期有关。我在那里编辑了查询,它应该根据索引的统计信息返回日期。我同意它可以缩小索引列表的范围,但这将返回任何在过去两个月内更新而不是创建的统计数据的索引