SQL索引-删除后重新创建

SQL索引-删除后重新创建,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我有一个临时表#Data,它填充在存储过程中 它包含大约15万行 然后,我为临时表#Data的两列创建一个聚集索引,比如IX_Data 然后我从#Data中删除数据,该数据删除了大约1M行(现在将总行数保持为14M) 我的问题:在这一点上,我应该删除IX_数据并重新创建它吗 #数据将在存储过程的其余部分中仅在一个位置进一步引用。您不应该这样做。索引由dbms自动维护,并始终保持同步 这就是为什么不建议创建比需要更多的索引,因为这是每个DML查询的性能损失。您没有指定您在哪个数据库上(可能是Ora

我有一个临时表
#Data
,它填充在存储过程中

它包含大约15万行

然后,我为临时表
#Data
的两列创建一个聚集索引,比如
IX_Data

然后我从
#Data
中删除数据,该数据删除了大约1M行(现在将总行数保持为14M)

我的问题:在这一点上,我应该删除IX_数据并重新创建它吗


#数据
将在存储过程的其余部分中仅在一个位置进一步引用。

您不应该这样做。索引由dbms自动维护,并始终保持同步


这就是为什么不建议创建比需要更多的索引,因为这是每个DML查询的性能损失。

您没有指定您在哪个数据库上(可能是Oracle?),但您的问题似乎是关于分段的,因为即使删除了一百万行,也应该在每个数据库中维护数据完整性(因此不需要删除并重新创建数据完整性索引)

那么,您如何知道您的索引是否是碎片化的(因此您需要重新创建索引,或者更好地重建索引)?每个数据库都有自己的方法。Oracle有内部表,您可以从中确定对象是否是分段的


但这取决于你的数据库类型。

这个问题的动机是什么?为什么这么问?既然你提到了聚集索引,我想这是针对
sql server
-正确吗??SQL只是一种查询语言,而不是数据库产品,所以这还不足以帮助您。请随时告诉我们您使用的是什么具体数据库(
sql server
oracle
mysql
postgresql
等)以及您使用的版本/版本!对不起,伙计们,忘了提了。我使用SQL Server 2014我正在优化一些4年前的代码,我看到了这一点,发现有点尴尬。这促使我问。@GreenBinary:您不能将维护与业务逻辑混为一谈。就是这样。我正在使用SQL Server 2014。看起来我可以从进程中删除drop和CREATEINDEX语句。