在SQLite中是否可以创建临时索引?

4
我正在开发的程序可以从另一个使用sqlite文件的程序(不是我们的)导入数据。我需要索引,但这些索引在sqlite文件中并不存在,而且我不想修改别人的数据以便让他们导入它。该索引被许多查询使用。因此,我想创建一个仅在连接期间存活的临时索引。
我看到过以下明显的语法(在2003年的邮件列表消息中引用):
$ sqlite3 thirdparty.sqlite
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TEMP INDEX foo ON SomeTable(SomeCol);
Error: near "INDEX": syntax error

是否可以像这样做?目前,我们只是在导入之前复制文件,但这些文件可能相当大,所以这样做不太实际。


2
如果我可以建议(对于未来,因为问题已经有点老了),添加索引,删除索引,然后运行VACUUM不会以任何方式更改数据库。也很少有数据损坏的可能性,只有在您的磁盘有坏道的情况下才会发生。 - Michał Leon
1个回答

4

临时索引被暂时添加,但很快就被删除了,因为无法保证一致性。如果索引只持续一个事务(这将导致独占锁,从而防止修改),那么这应该不是问题,但它们实现的方式并非如此。因此,目前sqlite不提供临时索引。有关更多详细信息,请参见http://permalink.gmane.org/gmane.comp.db.sqlite.general/4827


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接