SQLite 3을 지원하는 작은 Android 앱을 쓰고 있습니다. ATM 일부 DB-Functions를 구현하고 하나의 커다란 결합 된 쿼리를 사용하는 것이 더 나은지 또는 앱 성능과 관련하여 여러 쿼리를 사용하는 것이 괜찮은지 스스로에게 묻습니다.Android SQLite 3, JOINS 또는 여러 검색어?
내가 3 개의 테이블 "드라이버", "driven_runs", "race_disciplines"를 가지고 있다고 가정 해 보겠습니다. 모든 driven_run에는 드라이버와 race_discipline이 있습니다. 특정 분야의 특정 운전자에 의한 모든 인종 훈련을하고 싶다고 가정 해 봅시다.
이미 대가 드라이버 - 객체 및 반환에 레이스 징계와 함수 getRaceDiscipline (disciplineID)와 함수 getDriver (driverID)를 코딩 한
솔루션. 그래서 함수를 만들면됩니다.
public ArrayList<DrivenRun> getDrivenRunsOnDiscipline(short driverID, short disciplineID) {
ArrayList<DrivenRun> drivenRuns = new ArrayList<DrivenRun>();
String sql = "SELECT * FROM " + DBHelper.TABLE_DRIVEN_RUNS + " WHERE "
+ DBHelper.DRIVEN_RUNS_COLUMN_DRIVER_ID + "=" + driverID + " AND "
+ DBHelper.DRIVEN_RUNS_COLUMN_RACE_DISCIPLINE_ID + "=" + disciplineID + ";";
Cursor result = rawQuery(sql);
if (result.moveToFirst()) {
do {
Driver driver = getDriver(driverID);
RaceDiscipline discipline = getRaceDiscipline(disciplineID);
DrivenRun run = new DrivenRun();
run.setDriver(driver);
run.setDiscipline(discipline);
run.setResult("WHATEVER");
drivenRuns.add(run);
} while(result.moveToNext());
}
return drivenRuns;
}
이 경우 3 개의 쿼리가 차례로 실행되지만 코딩은 훨씬 간단합니다. 나는 하나 개의 큰를 만들 것 2
솔루션
String sql = "SELECT * FROM driven_runs CROSS JOIN drivers CROSS_JOIN race_disciplines WHERE driven_runs.driver_id=drivers.id AND driven_runs.race_discipline_id=race_disciplines.id"
Cursor result = rawQuery(sql);
같은 쿼리에 합류 수동으로 드라이버 및 DrivenRun 개체를 만들 것입니다. (3 개 테이블을 조인 할 때 또는 DB뿐만 아니라 3 개 쿼리를 실행합니까?)
이 솔루션은 훨씬 더 쓰기를 필요로하지만, 단 하나의 쿼리가 실행되는
가에 있기 때문에 솔루션 1로 이동하는 것을 확인길고도 짧은 이야기 입니다 성능에 관해서는별로 차이가 없다.