如何在sqlite中加速数据访问?

时间:2014-02-15 06:27:30

标签: android sqlite

我在Android设备上有一个sqlite数据库,具有以下方案:

    create table 'main' ('_id' integer primary key, 'word' text unique not null);

以后行数不会改变,目前为600000。

由于性能(速度)在应用程序中非常重要,我想找到一种方法来加速以下两个在应用程序中经常使用的查询:

    select * from [main] where '_id'=...
    select * from [main] where 'word'=...

到目前为止,我被告知要使用索引或批量交易。但我不知道如何利用这两种方法,以及我可以期望它们在多大程度上提高性能。顺便问一下,你知道其他任何提示吗?

1 个答案:

答案 0 :(得分:0)

使用EXPLAIN QUERY PLAN查看数据库引擎必须完成多少工作才能满足您的查询:是否需要进行全表扫描,或者使用索引可以快速满足查询。

PRIMARY KEYUNIQUE约束都会自动创建索引,因此您无需自己为这些列创建索引。

SELECT中,从列名中删除''引号 - 它们将被视为文字,而不是列名。

示例:

sqlite> create table 'main' ('_id' integer primary key, 'word' text unique not null);
sqlite> explain query plan select * from [main] where '_id'='...';
0|0|0|SCAN TABLE main (~1000000 rows)
sqlite> explain query plan select * from [main] where _id='...';
0|0|0|SEARCH TABLE main USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
sqlite> explain query plan select * from [main] where 'word'='...';
0|0|0|SCAN TABLE main (~1000000 rows)
sqlite> explain query plan select * from [main] where word='...';
0|0|0|SEARCH TABLE main USING COVERING INDEX sqlite_autoindex_main_1 (word=?) (~1 rows)