在表格中搜索的最有效方式

时间:2016-06-17 06:31:55

标签: android sqlite cursor android-sqlite database-performance

这是一般性能问题,我没有错误或类似的事情。

我正在开发一个使用SQLite数据库的应用程序,只想知道查询表格以找到特殊值的最佳,最快和最有效的方法。

示例:

我有一张桌子,我正在寻找一个特殊的字符串 我得到了所有行:

Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);

然后像

一样遍历游标
String searchedString = "THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR";
boolean success = false;
int count = cursor.getCount();

for(int i=0;i<count;i++) {
    String queryString = c.getString(1);
    if(queryString.equals(searchedString) {
        success=true;
        break;
    } else {
        cursor.moveToNext();
    }
}

另一种可能的方法是使用query()

Cursor cursor = db.query(
        TABLE_NAME, new String[] {STRING_COL},
        STRING_NAME + "=?",
        new String[] {"THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR"},
        null, null, null, null);

这两种方法之间是否存在性能差异? 很多教程都是通过循环显示迭代,但Docs建议使用query()方法。

query()方法与迭代循环相同吗? 它究竟是如何工作的?我无法在任何API中找到。

2 个答案:

答案 0 :(得分:2)

手动搜索需要更多代码(这会增加出错的风险)。

DB可能会执行类似的循环,但在DB中进行搜索并不需要将所有数据从DB移动到您的应用程序。

如果数据不多,则两种算法之间不会有明显的性能差异。但是,当数据量变大时,只需创建索引即可加快SQL搜索。

答案 1 :(得分:1)

我能看到的唯一区别是WHERE部分,它缺少第一个算法 如果向查询添加WHERE子句,第一个算法将受益匪浅。然后在性能方面与第二种算法相同。

这样的东西
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE STRING_COL = ?", new String[]{"THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR"}); 

就像现在一样,第一种算法比较慢。

正如bt @CL所述,通过索引WHERE列可以大大改善这两种算法。