2014-02-15 1 views
0

나는 다음과 같은 구조를 가진 안드로이드 장치에 SQLite 데이터베이스가 : 현재 미래에 변경되지 않습니다 행의 수는 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

난 당신이 인덱스 및 대량 거래에 대한 자세한 내용은 몇 가지 조사를하는 것이 좋습니다. 이들은 SQLite뿐만 아니라 대부분의 데이터베이스에서 일반적으로 사용됩니다. –

+0

p.s. '기본 키 '는 자동으로 색인을 생성하므로'_id' 필드를 선택하는 것이 상대적으로 효율적이어야합니다. –

+0

# 코드 전문가 : 고마워요. 열을 '유일한'제한이있는 경우 기본적으로 발생하는 인덱스를 만드는 경우 알고 싶어? DMSes에서 데이터 액세스를 가속화하는 유일한 방법은? –

답변

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) 
관련 문제