如何在安卓中查找Sqlite查询的执行时间

4
我试图优化我的Sqlite查询性能。
我想知道是否有办法找到每个Sqlite语句的执行时间,或者是否有任何工具可以在Android SDK中查看语句执行时间?
虽然我熟悉用于查询计时器的.timer On和.timer show命令。
示例:
任何答案都会受到高度赞赏!

请查看此链接https://dev59.com/omw05IYBdhLWcg3w6GAw 我认为它可以回答你的问题。 - Zohra Khan
3个回答

7

不要自己计算执行时间,让sqlite为您完成。
来自这里:

/**
 * Controls the printing of wall-clock time taken to execute SQL statements
 * as they are executed.
 *
 * Enable using "adb shell setprop log.tag.SQLiteTime VERBOSE".
 */
public static final boolean DEBUG_SQL_TIME =
        Log.isLoggable("SQLiteTime", Log.VERBOSE);

因此,要启用执行时间跟踪,请运行:
adb shell setprop log.tag.SQLiteTime VERBOSE

您需要重新启动应用程序以重新加载新的设置**。紧接着,您将开始在logcat中看到这些日志记录:

02-14 12:27:00.457 11936-12137/osom.info.dbtest I/Database: elapsedTime4Sql|/data/data/osom.info.dbtest/databases/test.db|1.000 ms|UPDATE TestTable SET key=? WHERE _id=1

**有时这还不够,所以运行adb shell stopadb shell start
要停止打印这些日志,请重新启动设备(此属性不会在重新启动之间持久保存),或将属性设置为更高的日志级别,例如:
adb shell setprop log.tag.SQLiteTime ERROR

对于那些使用 Jetpack's Room的人,请注意:这个解决方案也适用于Room(因为Room使用Sqlite作为底层数据库)。

@Napolean 只要 Room 使用 Sqlite 作为底层数据库,它就可以正常工作。 - Alex Lipov
1
谢谢 @Alex,它也适用于 Room。你应该更新这个答案并添加关于 Room 使用的说明,这对大家会很有帮助。 - Napolean

6
您可以使用Java来实现这一点:
int startTime = System.currentTimeMillis();

... // Execute the query here

int executionTime = System.currentTimeMillis() - startTime; // This variable now contains the time taken by the query, in milliseconds

@Nemmondommegav 这就是我正在寻找的...谢谢 - Nitesh Tiwari

1
你可以使用


System.currentTimeMillis();

在你的代码中了解运行查询所花费的时间...

   t1=System.currentTimeMillis();
   //Execute query
   t2=System.currentTimeMillis();

那么(t1-t2)会给你时间差。我曾经制作过一个基于此方法的安卓基准测试应用程序,用于计算不同智能手机基于SQL查询执行的性能表现。希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接