我在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'=...
到目前为止,我被告知要使用索引或批量交易。但我不知道如何利用这两种方法,以及我可以期望它们在多大程度上提高性能。顺便问一下,你知道其他任何提示吗?
答案 0 :(得分:0)
使用EXPLAIN QUERY PLAN
查看数据库引擎必须完成多少工作才能满足您的查询:是否需要进行全表扫描,或者使用索引可以快速满足查询。
PRIMARY KEY
和UNIQUE
约束都会自动创建索引,因此您无需自己为这些列创建索引。
在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)