java - 每次更新查询耗时 0.1 秒

标签 java sqlite

我正在编写一个简单的java程序,它执行一个简单的任务:它接受一个文本文件夹的输入,并返回每个文档中出现频率最高的5个单词作为输出。

起初,我尝试在没有任何数据库支持的情况下完成此操作,但是当我开始遇到内存问题时,我决定改变方法并将程序配置为与 SQLite 一起运行。 现在一切工作正常,但仅在数据库中添加单词就需要花费大量时间(801 个单词需要 67 秒)。

这是我启动数据库的方法:

    this.Execute(
                "CREATE TABLE words ("+
                "word VARCHAR(20)"+
                ");"
    );
    this.Execute(
        "CREATE UNIQUE INDEX wordindex ON words (word);"
    );

然后,一旦程序对文件夹中的文档进行了计数(假设为 N),我就会向表中添加 N 个计数器列和 N 个频率列

        for(int i = 0; i < fileList.size(); i++)
        {
            db.Execute("ALTER TABLE words ADD doc"+i+" INTEGER");
            db.Execute("ALTER TABLE words ADD freq"+i+" DOUBLE");
        }

最后,我使用以下函数添加单词:

public void AddWord(String word, int docid)
{

    String query = "UPDATE words SET doc"+docid+"=doc"+docid+"+1 WHERE word='"+word+"'";
    int rows = this.ExecuteUpdate(query);

    if( rows <= 0)
    {
        query = "INSERT INTO words (word,doc"+docid+") VALUES ('"+word+"',1)";
        this.ExecuteUpdate(query);
    }
}

我做错了什么,还是更新查询需要这么长时间执行是正常的?

最佳答案

将所有命令包装在一个事务中,否则每个命令都会得到一个事务(具有关联的存储同步)。

关于java - 每次更新查询耗时 0.1 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124918/

相关文章:

java - 有没有任何工具或技术可以识别打开的结果集

c - 在C中向SQLite表添加时间戳

Android SQlite OnUpgrade 问题

java - 将 boolean 值设置为 Activity 或非 Activity 存在于包含用户列表的 View 页面的下拉菜单中

java - MS Project 显示不正确的开始日期和结束日期

r - 使用RSQLite的R中分类变量的where子句

java - 更好的 SQLite 损坏检测

java - AXIS2 轴故障 : this is a soap-encoded endpoint

四叉树中的 Javafx 矩形不会消失/创建 - 使用鼠标事件

java - Junit参数化设置测试类中的常量