我有一个有 1400 行的表。每行都有一个 blob 字段,保存 10kb 到 500kb 之间的数据。我需要删除该表。我花了 3.5 分钟删除该表,并花了 3 分钟删除该表。这对用户来说太长了。
我怎样才能尽快删除该表? (不需要回滚或任何安全性,只需将其删除即可。)
我已经尝试过以下操作。
1. 设置页面大小:
sqlitedatabase.setPageSize(8000);
sqlitedatabase.execSQL("DROP TABLE IF EXISTS " + sTableName);
2.停用不起作用的日志日志。
sqlitedatabase.rawQuery("PRAGMA journal_mode=OFF",null);
sqlitedatabase.execSQL("DROP TABLE IF EXISTS " + sTableName);
这对我不起作用。我猜日志日志会花费很多时间,但仍然会写入磁盘。
来自SQLite手册 http://sqlite.org/speed.html(添加强调):
在删除表时,SQLite 比其他数据库慢。这可能是因为当 SQLite 删除一个表时,它必须遍历并删除处理该表的数据库文件中的记录。另一方面,MySQL 和 PostgreSQL 使用单独的文件来表示每个表,因此只需删除文件即可删除表,速度要快得多。
您可以选择创建和存储多个数据库文件,然后可以通过单个连接进行管理ATTACH https://www.sqlite.org/lang_attach.html and DETACH https://www.sqlite.org/lang_detach.html查询。
这是我刚刚在 SQLite3 的命令行客户端中运行的一个示例:
sqlite> ATTACH 'example.sqlite' AS example;
sqlite> CREATE TABLE example.ex ( a INTEGER );
sqlite> INSERT INTO example.ex VALUES (1),(2),(3);
sqlite> SELECT * FROM example.ex;
1
2
3
sqlite> DETACH example;
sqlite>
自从ex
表位于其自己的文件中,example.sqlite
,我可以简单地将该数据库与连接分离并删除整个文件,这会快得多。
请记住,您可以附加的数据库数量相当少(默认编译选项 http://www.sqlite.org/c3ref/c_limit_attached.html#sqlitelimitattached:7)。我还了解到,在这种情况下不支持外键,尽管该信息可能已过时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)