2011-11-03 97 views
3

我正在处理的程序可以从使用sqlite文件的其他程序(不是我们的)导入数据。我需要在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 

是否有可能做这样的事情?现在,我们只是在导入之前制作一个文件的副本,但这些文件可能很大,所以这是不切实际的。

+1

如果我可能会建议(对于将来,由于问题已经有点老了),添加和索引,删除索引,然后运行VACUUM,不会以任何方式更改数据库。 数据损坏的可能性也很小,只有当磁盘有坏扇区时才会发生。 –

回答

3

临时指数暂时被添加,但很快就会被移除,因为一致性无法得到保证。尽管如果索引只持续一个事务(这将导致排他锁并因此阻止修改),这应该不是问题,但这不是他们实现的方式。所以在写这篇文章时,临时索引并不适用于sqlite。详情请参阅http://permalink.gmane.org/gmane.comp.db.sqlite.general/4827

相关问题