单个SQLite数据库的多个文件

tha*_*era 18 sqlite

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

小智 23

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

使用

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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 显然,有一个限制开关来限制可以连接到连接"SQLITE_LIMIT_ATTACHED"的数据库的数量.也许tameera在测试中达到了这个极限? (3认同)

yoo*_*shi 5

如果您不需要在这些表之间进行连接,则可以手动拆分DB并说明哪些表位于哪个DB(= file)中.

我不认为让SQLite在多个文件中分割您的数据库是可能的,因为您通过告诉文件名连接到数据库.