在 table 中搜索的最有效方法

Most efficient way to search in a table

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

我正在开发一个使用 SQLite 数据库的应用程序,只想知道通过 table 查询以查找特殊值的最佳、最快和最有效的方法是什么。

示例:

我有一个 table,我正在搜索一个特殊的字符串。
我通过以下方式获取所有行:

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.

中找不到

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

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

如果数据不多,两种算法之间不会有明显的性能差异。但是,当数据量变大时,可以通过简单地创建索引来加快SQL搜索速度。

我能发现的唯一区别是第一个算法中缺少的 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 列来显着改进。