2012-02-28 74 views
0

我有一个包含大约80000条记录(包含7列)的sqlite密码数据库。它目前在搜索记录方面花费了太多时间。我需要一种基于某些标准(需要索引等)来搜索1个或多个记录的优化方法,以便缩短搜索时间。有没有人知道如何着手实现这个目标?急需急救。 :(SQLite数据库花费太多时间检索(或获取一些数据)

编辑: 我使用SQLite加密API,因为我需要存储在SQLite数据库加密的数据我已经设置了编译键和所使用的加密是AES - 256我还创建的索引上。每个表都在我的数据库中,但我的搜索速度不是很快,需要的时间太多了,需要尽快解决这个问题。用户点击一个文本字段就可以了。总结这个问题,让我告诉你流程。

我有2个文本字段和一个包含〜80k条记录和7列的表格 当我在field1中键入任何内容时,将使用field1的内容在表上进行搜索。因此,可以说我在我的field1中键入'a',然后选择查询将返回列1中包含'a'字母的所有记录。所以,只要我输入字母,表格就会被搜索到。 直到现在没有问题。它没有任何时间延迟地返回记录。查询是:

SELECT DISTINCT <COL1> COLLATE NOCASE as <COL1> from <TABLE_NAME> where <COL1> like '%ab%' LIMIT 0,501 

现在,如果我点击2场,然后我看到场2光标后1秒作为此查询得到执行:

SELECT DISTINCT <COL2> COLLATE NOCASE as <COL2> from <TABLE_NAME> where <COL1> like '%ab%' LIMIT 0,501 

现在,DB提取过程如果我在field2上输入任何内容,请花点时间。这里是最后的查询:

SELECT DISTINCT <COL2> COLLATE NOCASE as <COL2> from <TABLE_NAME> where <COL1> like '%ab%' AND <COL2> like '%cd%' LIMIT 0,501 

当我试图分析问题,我才知道问题是由于DISTINCT关键字。 列上我已经创建指标如下:

CREATE INDEX <name1> on <TABLE_NAME>(<COL1>) 
CREATE INDEX <name2> on <TABLE_NAME>(<COL1> COLLATE CASE) 
CREATE INDEX <name3> on <TABLE_NAME>(<COL2>) 
CREATE INDEX <name4> on <TABLE_NAME>(<COL2> COLLATE CASE) 

任何人有任何想法如何使这个检索快。

+0

可能问题不在sqlite大小,但你的sql语句。你想在这里发布你的sql语句? – hawshy 2012-02-28 06:34:09

+0

查询类似于[@“select rowid from'%@'其中\”Values \“='%@'”,tableName,descValue]其中descValue是col“值”的col值 – anshul 2012-02-28 06:44:10

+0

什么是returnType功能?总是尝试返回类对象。 – 2012-02-28 08:29:07

回答

2

像索引? SQLite完全有能力使用索引,as explained here in the docs.尽管如此,表格的结构和目的将决定如何最好地实现它们。

0

我假设你使用SQLite合并源。如果您还需要全文搜索,则可以在sqlite3.c之上添加此定义(或者您需要搜索哪些值?)。

#define SQLITE_ENABLE_FTS3 

然后创建使用docsVeryVito提到的索引。

+0

嘿Erik,在使用启用FTS3的SQLite时有疑问。正如这个链接所暗示的,[SQLITE FTS3](http://sqlite.org/fts3.html)如果我使用FTS3或FTS4扩展,我可以显着减少数据库读取时间(从22秒到0.003秒)。我想知道如何使用这个扩展,以及查询和数据存储方面与普通sqlite表之间的区别。我已经使用sqlite数据库,但由于记录大约80000,所以我现在想使用FTS3。我需要做什么改变才能迁移到fts3。? – anshul 2012-02-28 13:47:42

+0

我目前使用FTS3部署了大约90000条记录,全文搜索时间通常在1或2ms左右。我无法帮助您解决迁移问题。 – 2012-02-28 15:36:21

+0

我正在使用sqlite密码API,因为我需要将加密数据存储在sqlite数据库中。我已经设置了杂注密钥。并在AES - 256中使用加密。我也创建了我的数据库中的每个表上的索引。但是我的搜索速度并不快。它花费了太多时间。也许现在你可以帮助我,因为我已经在使用sqlite cipher API。请朋友。真的需要你的帮助Erik。 – anshul 2012-03-01 05:46:18

相关问题