Android SQLite 性能:单个查询中的多个选择与多个查询中的单个选择?

Posted

技术标签:

【中文标题】Android SQLite 性能:单个查询中的多个选择与多个查询中的单个选择?【英文标题】:Android SQLite Performance: Multiple selects in single query Vs single select in multiple queries? 【发布时间】:2016-11-09 13:08:33 【问题描述】:

性能方面,哪个更好(对于单个表)?:

    单个查询中的多选或 在多个查询中单选?

例子:

/*table schema*/
create table ACTIVITY_TABLE (
ID integer primary key autoincrement,
INTERVAL_ID integer not null, 
ACTIVITY_TYPE text , 
WIFI_LIST text, 
COUNT integer not null );



/*Multipe selects in single query*/
select * from 
    (select sum(COUNT)/60 as Physical from ACTIVITY_TABLE where  INTERVAL_ID >=1  and  INTERVAL_ID <=3 and (ACTIVITY_TYPE="Still" or ACTIVITY_TYPE = "Walking" or ACTIVITY_TYPE = "Running"  ) ),
    (select sum(COUNT)/60 as vehicular from ACTIVITY_TABLE where  INTERVAL_ID >=1  and  INTERVAL_ID <=3 and (ACTIVITY_TYPE="InVehicle" ) );

【问题讨论】:

【参考方案1】:

对于您的示例,您可以通过以下方式修改查询,这将更有效,我没有测试查询。

select
sum(case when activitytype='walking' or activitytype='still' or activitytype='running' then COUNT else 0 end )/60 as physical,

sum(case when activitytype='InVehicle' then COUNT else 0 end)/60 as vehicular

from

activity_table

where interval_id>=1 and interval_id<=3

【讨论】:

感谢@Mohanraja,但您的查询没有给我预期的结果 @ctu 我想我错过了 COUNT & (/60) 部分,我将编辑该部分,现在试试吧 现在查询给出了预期的结果。有一个脚本或代码来检查两个查询的性能会很好。我会做一些谷歌搜索,也许我可以找到一些 sqlite 查询性能测试器,因为现在两个查询(你的和我的)都在 1 毫秒内返回结果,因此我真的不能确定哪个更好。不过感谢您的意见:)

以上是关于Android SQLite 性能:单个查询中的多个选择与多个查询中的单个选择?的主要内容,如果未能解决你的问题,请参考以下文章

SQLite3 数据库查询优化

如何从python中的SQLite查询中获取单个结果?

如何从 Android SQLite 查询的动态 ArrayList 编写 WHERE IN 子句

Android 和 iOS 上 SQLite 的性能差异

Android中的SQLite查询来计算行数

Android:扩展用户的通讯录。性能 ContentProvider vs Sqlite vs 内存中的列表