amp*_*ine 5 sql sqlite indexing
我有一个巨大的数据库,需要对其进行索引,我将大量信息插入其中,分为一千个块。每次插入时索引都会更新。问题是,在大约第 100 条左右之后,插入信息所需的时间变得非常长,因为这些巨大的事务导致日志文件攀升到超过 300 兆。
有没有办法推迟更新索引(可能通过命令FREEZE INDEX或其他方式),从而索引将保持在模式中定义,并且在填充所有表后,它可能会被解冻并更新。
我知道这已经可以通过DROP INDEX和来完成CREATE INDEX,但我一直在寻找一种更优雅的解决方案,或者可能是一个技巧。
不幸的是,我无法轻松更改 DBMS,否则我会使用 PostgreSQL 进行研究。
除了不“优雅”之外,还有其他原因导致您不想使用 DROP INDEX/CREATE INDEX 吗?我假设您是在定期维护期间执行此批量加载?DROP INDEX/CREATE INDEX 几乎是批量数据加载的标准过程。通过最后重新创建非聚集索引,您可以确保数据库可以创建最有效的索引结构(从而使针对数据的查询运行得更快)。
一些数据库具有附加功能来向您隐藏这些详细信息(SQL Server 允许您“禁用/启用”索引),但在幕后它们仍然有效地执行 DROP INDEX/CREATE INDEX。
同样,即使存在“冻结索引”,您也不会保存任何内容。如果您要输入大量数据,最好在最后完全重建索引(这实际上就像“DROP INDEX/CREATE INDEX”)。
如果您的日志变得太大,也许您应该将插入分成更小的事务块?
| 归档时间: |
|
| 查看次数: |
2366 次 |
| 最近记录: |