T-Sql - 在另一个选择查询中选择查询需要很长时间

时间:2017-05-17 16:58:23

标签: sql sql-server performance tsql

我有一个带参数的过程,但它的调用需要很长时间。我决定检查我的查询有什么问题,并得出结论,问题是列入(@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 [...]

为什么会这样? 我应该如何创建一个存储过程,该过程采用一组参数来快速使用它?

编辑:

也许这是索引的问题?索引是在这三列上创建的。

1 个答案:

答案 0 :(得分:2)

对于如此大的性能差异,我猜你有一个或多个索引。特别是,如果您在(ID_DISTRIBUTOR, ID_DATA_TYPE, ID_AGGREGATION_TYPE)上有索引,则第二个查询可以使用索引。 SQL Server可以识别出IN确实是=,并且查询是一个简单的查找。

在第一种情况下,SQL Server没有"知道"子查询实际上只有一行。这需要一组不同的优化。特别是,无法使用上述索引,因为IN通常会优化=

至于做什么。首先,查看执行计划,以便您可以看到两个版本之间的差异。然后,在IN列表中使用多个值测试第二个版本。

如果每次比较只能使用一个值,则使用=而不是IN