我有一个临时表#Data
,我填充在存储过程中。SQL指数 - 重现删除后
它包含像15M行。
然后,我为临时表#Data
的几列创建一个聚簇索引,如IX_Data
。
然后我从#Data
它删除像1M行删除(保持总排14M现在)。
我的问题:在这一点上,我应该放下IX_Data
和重建呢?
#Data
正在只是在一个位置中所存储的程序的其余部分进一步称作。
我有一个临时表#Data
,我填充在存储过程中。SQL指数 - 重现删除后
它包含像15M行。
然后,我为临时表#Data
的几列创建一个聚簇索引,如IX_Data
。
然后我从#Data
它删除像1M行删除(保持总排14M现在)。
我的问题:在这一点上,我应该放下IX_Data
和重建呢?
#Data
正在只是在一个位置中所存储的程序的其余部分进一步称作。
你不应该。索引由dbms自动维护并始终保持同步。
这就是为什么它不建议比你需要的,因为它是每个DML查询的性能损失,以创造更多的索引。
不指定你是哪个数据库(也许是甲骨文?),但你的问题似乎即将碎片,因为数据的完整性应在每个数据库编程和维持,即使你删除行的一百万(所以有无需为数据完整性删除并重新创建索引)。
那么,你如何知道你的索引是否是零散的(所以你需要重新创建,或者更好,重建呢)?每个数据库都有他的方法。 Oracle具有内部表,您可以从中确定对象是否分段。
但是这取决于你的类型的数据库。
我正在使用SQL Server 2014.看起来我可以从我的proc中删除drop并创建索引语句。 – GreenBinary 2014-12-02 21:36:19
这个问题的动机是什么?你为什么要问? – 2014-12-02 21:11:13
既然你提到*聚簇索引*,我认为这是'sql-server' - 正确的? ** SQL **只是查询语言 - 而不是数据库产品 - 所以这实在不足以帮助您。请始终告诉我们具体数据库**('sql-server','oracle','mysql','postgresql'等)以及您使用的是哪个版本/版本! – 2014-12-02 21:21:02
对不起,忘了提。我使用SQL Server 2014 – GreenBinary 2014-12-02 21:33:58