我们的 Windows 窗体应用程序通过 ADO.NET 和 SOAP Web 服务从 SQL Server 的视图中提取记录,并在数据网格中显示它们。我们有几个大约 25,000 行的案例,工作相对顺利,但潜在客户需要在一个列表中包含很多倍。
为了弄清楚我们现在的扩展程度,以及我们可以实际改进的程度(和程度),我想实现一个模拟:让 SQL Server 发送虚构的随机数据,而不是显示实际数据。客户端和传输端基本相同;视图(或至少是基础表)当然会以不同的方式工作。用户指定虚构行的数量(例如 100,000)。
目前,我只想知道客户端需要多长时间来检索和处理数据并准备好显示它。
我想弄清楚的是:如何让 SQL Server 发送此类数据?
我是否:
- 创建一个必须预先运行以填充实际表的存储过程?
- 创建一个我指向的函数,从而让服务器“实时”生成数据?
- 以某种方式复制和/或随机化现有数据?
第一个选项对我来说听起来会产生最接近现实世界的结果。因为数据实际上是“物理存在的”,所以SELECT
查询在性能方面与对真实数据的查询非常相似。但是,它会通过其他无意义的操作对服务器征税。假数据也会被备份,因为它会存在于同一个数据库中——当然,除非我在每次运行基准测试后删除数据。
第二个和第三个选项在运行实际模拟时对服务器征税,因此可能会产生不切实际的缓慢结果。
此外,我不确定如何创建这些行,而不是使用循环或游标。SELECT top <n> random1(), random2(), […] FROM foo
如果foo
实际上碰巧有条目,我可以使用<n>
,但否则我(显然)只会获得foo
碰巧有的行数。AGROUP BY newid()
或类似的东西似乎不起作用。