因此,我们有一个架构,其中包含系统中使用的各种报表查询的视图名称和列。其中一些观点非常陈旧,写得不是很好,但仍然可以完成工作(如果很慢)。
无论如何,我正在编写一个脚本,它使用动态sql来确定报告中每列的不同值的数量。此脚本的每个视图的每个列循环的关键部分如下:
RelativeLayout relativeLayout = new RelativeLayout(this);
//You can put the background in another color to check were is the layout
//relativeLayout.setBackgroundResource(android.R.color.black);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(240, 320);
relativeLayout.setLayoutParams(lp);
setContentView(relativeLayout);
这很好用。但是,正如我之前提到的,这些视图中的一些写得很差,并且一些旧模式可能使用更好的索引,因此从列中检索不同的值需要很长时间,有时需要几个小时或者甚至几天。
由于这个原因,执行此操作的效率大大降低,因为每个报告都需要几个月才能完成。问题是,我们并不关心实际的不同价值数量,但实际上只知道是否还有100个不同的价值。
所以我的问题是,有一些方法可以在一旦不同值的数量超过100并且只返回100时停止查询,和/或只是取消sp_executesql调用,然后继续其余的脚本(如果& #39;花费的时间超过5分钟?
答案 0 :(得分:1)
在处理数据之前,实际上没有办法做你想要的。只关注查询,你可以这样做:
SELECT @val = COUNT(*)
FROM (SELECT TOP 100 @curColumnNameFROM
FROM @curViewName
GROUP BY @curColumnName
) t
这不太可能对性能产生重大影响。
有时在这些情况下,你可以这样做:
SELECT @val = COUNT(DISTINCT @curColumnName)
FROM (SELECT TOP 10000 @curColumnNameFROM
FROM @curViewName
GROUP BY @curColumnName
) t
这可以减少数据的大小,这可能足以用于某些目的。