Android SQLite 3,JOINS 还是多个查询?

标签 android sqlite join

我正在编写一个支持 SQLite 3 的小型 Android 应用程序。 ATM 我正在​​实现一些 DB-Functions 并问自己是否最好有一个大的连接查询,或者是否可以在应用程序性能方面使用多个查询。

假设我有 3 个表“drivers”、“driven_runs”、“race_disciplines”。每个 driven_run 都有一个 driver 和一个 race_discipline。假设我想获得某个车手在某个纪律中的所有比赛纪律。

解决方案一

我已经编写了一个函数 getDriver(driverID) 和一个返回 Driver-Object 的函数,以及一个函数 getRaceDiscipline(disciplineID) 和一个 Race Discipline 作为返回。所以我只想创建一个函数

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 个查询,但编码要简单得多。

方案二

我会创建一个像这样的大连接查询

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);

并会手动创建 Driver 和 DrivenRun 对象。

这个解决方案需要更多的编写,但只执行了一个查询(或者在连接 3 个表时数据库是否也执行 3 个查询?)

长话短说,是否可以采用解决方案 1,因为在性能方面没有太大差异?

最佳答案

一般来说,在有良好的性能理由之前,尽量使用更简单的代码。鉴于这无论如何都是 SQLite,我认为性能差异不大,因为查询的开销非常低。

过早的优化是万恶之源。

关于Android SQLite 3,JOINS 还是多个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294967/

相关文章:

sql - 检查关系是否存在并返回真或假

java - 启动应用程序时出现致命异常

Android:快速获取 GPS 位置

javascript - 使用 velocity.js 循环动画

android - WebView fragment 中的 OnKeyDown

iphone - iPhone中的sqlite中的“数据库已锁定”

sql - 嵌套查询: best practices

java - 避免在 Android 设备上的应用程序设置中单击 'clear data' 按钮时从数据库中删除数据

sql: sqlite: 服务器端分页

MySQL 在连接时丢失行