有没有办法推迟更新索引?

时间:2012-01-22 19:14:08

标签: sql sqlite indexing

我有一个庞大的数据库,它应该被编入索引,我将大量信息插入其中,分解成一千个块。每次插入一个索引都会更新。问题是,插入信息所需的时间在大约100左右之后变得非常长,因为这些巨大的交易导致日志文件爬升到超过300兆。

有没有办法推迟更新索引(可能使用FREEZE INDEX命令或其他东西),从而索引将在架构中保持定义,并且在填充了所有表之后,它可能会被解冻和更新

我知道这可以通过DROP INDEXCREATE INDEX完成,但我正在寻找一种更优雅的解决方案,或者可能是一种技巧。

不幸的是,我无法轻松更改DBMS,或者我会调查使用PostgreSQL。

2 个答案:

答案 0 :(得分:3)

除了它不是“优雅”之外还有其他任何原因你不想使用DROP INDEX / CREATE INDEX。我假设您在定期维护期间正在进行此批量加载? DROP INDEX / CREATE INDEX是批量数据加载中的标准过程。通过在末尾重新创建非聚集索引,您可以确保数据库可以创建最有效的索引结构(从而使对数据的查询运行得更快)。

某些数据库具有隐藏这些详细信息的附加功能(SQL Server允许您“禁用/启用”索引)但在幕后它们仍在有效地执行DROP INDEX / CREATE INDEX。

同样,即使有“FREEZE INDEX”,你也不会保存任何东西。如果要输入大量数据,最好在最后完全重建索​​引(这实际上就像“DROP INDEX / CREATE INDEX”)。

如果您的期刊变得太大,或许您应该将插入内容拆分为更小的事务块?

答案 1 :(得分:1)

您希望在事务中运行插入(或使用事务批处理)。提交后,索引将会更新。