我有一个带参数的过程,但它的调用需要很长时间。我决定检查我的查询有什么问题,并得出结论,问题是列入(@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data.getExtras() != null) {
String str = data.getStringExtra("test");
Toast.makeText(getApplicationContext(), "ActivityA onActivityResult() called value is: " + str, Toast.LENGTH_SHORT).show();
}
}
)。
两个查询都返回1500行。
第一次查询:时间45秒
第二次查询:时间0秒
SELECT [...]
为什么会这样? 我应该如何创建一个存储过程,该过程采用一组参数来快速使用它?
编辑:
也许这是索引的问题?索引是在这三列上创建的。
答案 0 :(得分:2)
对于如此大的性能差异,我猜你有一个或多个索引。特别是,如果您在(ID_DISTRIBUTOR, ID_DATA_TYPE, ID_AGGREGATION_TYPE)
上有索引,则第二个查询可以使用索引。 SQL Server可以识别出IN
确实是=
,并且查询是一个简单的查找。
在第一种情况下,SQL Server没有"知道"子查询实际上只有一行。这需要一组不同的优化。特别是,无法使用上述索引,因为IN
通常会优化=
。
至于做什么。首先,查看执行计划,以便您可以看到两个版本之间的差异。然后,在IN
列表中使用多个值测试第二个版本。
如果每次比较只能使用一个值,则使用=
而不是IN
。