2016-08-01 2 views
-1

나는 잘 작동하는 응용 프로그램을 가지고 있습니다. 그러나 데이터베이스 쿼리를 최적화하면 성능을 향상시킬 수 있다고 생각합니다. 그리고 나는 제안이 필요하다.Sqlite Android 최적화

이 내 "선택 쿼리"의 일부입니다

private static final String SELECT = "SELECT " + 
     "dz.first_id AS first_id, " + 
     "dz._id AS _id, " + 
     "dz.att1 AS att1, " + 
     "dz.att2 AS att2, " + 
     "dz.att3 AS att3, " + 
     "dz.att4 AS att4, " + 
     "dz.att5 AS att5, " + 
     "d.var1 AS var1, " + 
     "d.name AS name, " + 
     "d.last_update AS last_update, " + 
     "d.image_url AS image_url, " + 
     "d.image_highlighted_url AS image_highlighted_url, " + 
     "d.var2 AS var2, " + 
     "d.type AS type, " + 
     "d.state AS state, " + 
     "d.sync AS sync, " + 
     "d.var3 AS var3 " + 
     "FROM table1 dz INNER JOIN table2 d " + 
     "ON d._id = dz.first_id "; 

Cursor result = conn.rawQuery(SELECT, null); 

* table1table2 간단한 제작이 : 하나의 _id integer PRIMARY KEY AUTOINCREMENT NOT NULL

보기를 사용하는 것이 유용하다? 다른 제안?

감사합니다.

+0

쿼리 최적화를 원하십니까? 구체적으로 말하십시오. 또한 테이블 스키마를 게시 할 수 있습니까? – bpachev

+1

WHERE 및 JOIN의 인덱싱은 생명의 은인입니다. 또한 문자열 연결 대신 StringBuilders를 사용합니다. –

+0

쿼리 최적화를 찾고 있습니다. 예. 테이블 생성은 간단하며 하나의 _id 정수만 가능합니다. PRIMARY KEY AUTOINCREMENT NOT NULL –

답변

2

이 쿼리는 잘린 것처럼 보이지만 실제로 얻을 수있는 옵션은 선택 사항에서 불필요한 열을 남겨 둘 수 있는지 또는 dz.first_id와 d._id를 모두 볼 수 있는지 여부입니다. 색인을 설정하십시오. 다음과 같이 dz에 색인을 추가하십시오.

CREATE INDEX index1 ON table1 (first_id); 
+1

이 쿼리가 없으면 DB는'table1'을 스캔하고 별도의 인덱스를 사용하는 것보다 빠른 rowid ('_id')를 사용하여'table2'에서 일치하는 행을 검색합니다. –