单个SQLite数据库的多个文件

时间:2012-02-23 09:13:50

标签: sqlite

Afaik,SQLite将单个数据库存储在一个文件中。由于这会降低使用大型数据库时的性能,是否可以明确告诉SQLite不要将整个数据库存储在单个文件中,而是将不同的表存储在不同的文件中呢?

3 个答案:

答案 0 :(得分:18)

这个问题大概是三年了,但是当我搜索同样的问题时,我就到了这里。我发现晚了,它有可能:

使用

sqlite3.exe MainDB.db

ATTACH DATABASE 'SomeTableFile.db' AS stf;

从其他数据库文件

访问该表

SELECT * FROM stf.SomeTable;

您甚至可以加入多个文件

SELECT *
FROM MainTable mt
JOIN stf.SomeTable st
ON (mt.id = st.mt_id);

https://www.sqlite.org/lang_attach.html

tameera说有62个附加数据库的限制,但我从未达到这个限制所以我无法确认。

除了一些特殊情况之外,最大的优点是您可以限制数据库文件中的碎片,并且可以在每个表上单独使用VACUUM命令!

答案 1 :(得分:6)

如果您不需要这些表之间的连接,您可以手动拆分数据库并说明哪些表位于哪个DB(=文件)中。

我认为让SQLite在多个文件中拆分数据库是不可能的,因为你通过告诉文件名来连接数据库。

答案 2 :(得分:3)

SQLite数据库文件可能会变得非常大而不会造成任何性能损失。

可能降低性能的因素包括:

  • 文件锁定争用
  • 表大小(如果使用索引并发出写入查询)

此外,默认情况下,SQLite会限制number of attached databases to 10

无论如何,try partition your tables。你会发现SQLite可以通过这种方式大大增长。