我的sqlite3数据库/查询非常慢。切换或修复查询?

我的sqlite3数据库/查询非常慢。切换或修复查询?,sqlite,Sqlite,我有一个很大的sqlite数据库。它是185mb 此查询大约需要5秒钟,返回2行。我给user.name添加了一个索引,而不是Content.user\u id。这仍然需要很多秒。sqlite可以处理这样的大文件吗?对于私有应用程序,有没有一个简单的修复方法,比如告诉sqlite在应用程序启动时将所有东西都放在ram中?它的C.NET仅供开发人员使用 select Content.*,name from user join Content on Content.

我有一个很大的sqlite数据库。它是185mb


此查询大约需要5秒钟,返回2行。我给user.name添加了一个索引,而不是Content.user\u id。这仍然需要很多秒。sqlite可以处理这样的大文件吗?对于私有应用程序,有没有一个简单的修复方法,比如告诉sqlite在应用程序启动时将所有东西都放在ram中?它的C.NET仅供开发人员使用

select Content.*,name from user 
                join Content on Content.user_id=user.id 
                where user.name like 'some_name' order by some_col ASC;

也许您应该检查您的

并尝试以下操作:

将“some_name”替换为=“some_name”。根据第一个百分号或下划线的位置,它们可能无法在user.name上使用您的索引。 启动分析。 以下是你的答案:

我认为您启用了不区分大小写的pragma。这意味着:


您应该重新创建数据库,并在表用户的name列的定义中使用name COLLATE NOCASE。因此,所有用户名的比较测试都不区分大小写,索引也不区分大小写。这样,不区分大小写的LIKE也可以使用索引。

我将索引添加到user.name而不是Content.user\id;你是说你添加了两个索引吗?=似乎不起作用,名称正确,包括大写字母。我搞不懂如何使用analyze。我看着并写下了分析用户;什么也没看见-编辑-我正在测试的名称也是theTestUser@acidzombie24,请参阅我答案中的后续内容。如果名称正确(包括大写),则从名称=“…”的用户返回SELECT*?显然,我的数据库“格式不正确”。我相信我可以在一两分钟内重新生成它。ok不仅工作正常,而且现在速度非常快。问题是数据库已损坏/格式不正确,现在一切正常。我认为在我的应用程序中,使用like仍然很慢,=很快,而sqlite命令行应用程序两者都很快。我不知道为什么,但无论如何,这是完全固定的。接受