查询执行时间不一致

时间:2018-11-08 20:52:34

标签: android sqlite loader

我反复执行相同的查询,有时查询速度很快,而其他时候则需要更长的时间。有人知道是什么原因造成的吗?

我有一个内容提供程序,可以通过我的活动的加载程序进行访问。

它必须将10,000多个条目过滤到数据库中,并且我已经对其进行了优化,以减少查询时间。

查询通常在0到30毫秒内运行。每当我执行查询时都会打印出信息。

但是我现在注意到有更多的数据,有时查询将运行得非常快,而其他时候则需要3-5秒。使用与快速执行相同的选择/查询/参数。

日志显示以下时间:和查询完全相同。

Query took 15ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 15ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 3499ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 3502ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 18ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 6ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 3618ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]
Query took 3601ms to complete SELECTION: Rows: 3 :: type != ? sel args: [0]

我在提供者中将以上日志记录为此类

queryBuilder.setProjectionMap(projectionMap);
long start = System.currentTimeMillis();
retCursor = queryBuilder.query(mOpenHelper.getReadableDatabase(), null,
                selection,
                selectionArgs,
                null,
                null,
                null, null);
//This goes with the log statement, to prevent a null pointer on selectionArgs
if (selectionArgs == null) {
    selectionArgs = new String[]{"null"};
}
Log.d(LOG_TAG, "Query took " + (System.currentTimeMillis() - start) + "ms to complete SELECTION:" +
        " Rows: " + retCursor.getCount() +
        " :: " + selection + " sel args: " + Arrays.toString(selectionArgs));

编辑:我从中提取的表有500万行。但是我在带有标志的列中插入了一个标记,以指示它是否是为特定用户插入的最后一条记录。并将其编入索引。这使我能够非常迅速地为每个用户的最后一个职位排行。新位置将删除旧位置上的标志,并插入设置了标志的新位置。我可以在不到20毫秒的时间内查询该表,也可以在大约2.5秒或更长时间内查询该表。现在似乎发生了大约30-40%(最长时间)的情况。

0 个答案:

没有答案