Afaik,SQLite将单个数据库存储在一个文件中。由于这会降低使用大型数据库时的性能,是否可以明确告诉SQLite不要将整个数据库存储在单个文件中,而是将不同的表存储在不同的文件中呢?
答案 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可以通过这种方式大大增长。