之前在项目中使用了sqlite数据库,当日志变大时,执行CRUD操作就会变慢
后来尝试删除7天前的记录进行优化
delete from XX_CollectData where CreateTime<='2024-01-24'
发现sqlite文件的大小就没有变化,delete命令只是逻辑删除,所在的文件的字节码仍然还在,优化效果仍不明显。
后来使用真空命令VACUUM,发现文件大小确实变小了。
VACUUM
SQLite Vacuum
VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。
如果表中没有明确的整型主键(INTEGER PRIMARY KEY),VACUUM 命令可能会改变表中条目的行 ID(ROWID)。VACUUM 命令只适用于主数据库,附加的数据库文件是不可能使用 VACUUM 命令。
如果有一个活动的事务,VACUUM 命令就会失败。VACUUM 命令是一个用于内存数据库的任何操作。由于 VACUUM 命令从头开始重新创建数据库文件,所以 VACUUM 也可以用于修改许多数据库特定的配置参数。
相关测试程序类【C#代码】
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
using System.Linq;
using System.Text;
namespace SnakeSqliteDemo
{
/// <summary>
/// 作者:斯内科
/// 时间:2024-01-24
/// 功能:sqlite数据库操作类
/// </summary>
public class SqliteDbHelper
{
/// <summary>
/// 连接字符串
/// </summary>
private string m_strConnectString = string.Empty;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="strDbPath">SQLite数据库文件路径</param>
public SqliteDbHelper(string strDbPath)
{
this.m_strConnectString = "Data Source=" + strDbPath;
}
/// <summary>
/// 创建SQLite数据库文件
/// </summary>
/// <param name="strDbPath">要创建的SQLite数据库文件路径</param>
/// <param name="strdbTableCreateString">要创建的SQLite数据库表格</param>
public static void CreateDB(string strDbPath, string strdbTableCreateString)
{
using (SQLiteConnection connection = new SQLiteConnection("Data Source="