我的sqlite数据库中有一个表T,它只用于执行选择。
此表T由多个进程(最多16个)同时访问。由于此表是“只读”,我如何调整它以提高查询性能?
当日志模式=删除时,我收到以下错误消息: RS_SQLite_fetch:第一步失败:数据库已锁定,即使并发进程正在执行选择。然后我改变了日志模式= wal,我不再收到该消息了。所以我的问题是:
我可以设置哪些参数来告诉数据库该表是只读的。
我可以永久设置日志模式=关闭吗? Documentation表示每次打开数据库时都必须设置日志模式。只有当模式为wal或delete时才能永久设置。
我可以指定一些选项来将该表存储或缓存在内存中吗?我不能使用字符串:memory:,因为该表将由不同的进程访问。
我可以调整哪些其他参数?
答案 0 :(得分:1)
SQLite不会锁定表格。 所有锁定都在整个数据库上完成。
要防止对任何其他表的任何写入干扰并发读取,您必须使用WAL模式,或将此表移动到单独的数据库中。
journal_mode = off
不会禁用锁定。