有没有办法将 2 个不同查询的结果添加到结果集中?
类似的东西:
ResultSet rs ;
i=0;
while(i<=l)
ResultSet rs1 = select * from tablei;
rs = rs + rs1;
i++;
}
我知道我可以用联合来做到这一点,但我有很多查询,如果我使用联合,查询太慢了。
任何的想法?
你是在做 UNION 还是 UNION ALL?后者与自己做应该没有太大区别(尽管我希望自己做会慢一些)。
我不相信有任何方法可以将 ResultSet 添加到另一个。他们在类中没有执行此类操作或从代码更新 ResultSet 的方法。结果集旨在从数据库接收数据,而不是从开发人员操作、用户输入等接收数据。
我的建议是将数据提取到数组或类似的东西中,并在代码中操作数据或在查询中执行 UNION。
根据您使用的数据访问库,ResultSet 有一个名为 MoveNextRecordSet() 的方法,SqlDataReader 提供 NextResult()。
创建一个存储过程以返回多个结果集(即一个 sp 中的多个 SELECT 语句),并使用这些方法浏览结果集。
如果您在数据库中找到比 UNION 性能更好的方法,我会感到惊讶。Union 正在做你想做的事,数据库服务器会尽可能地优化它。你基本上是在重新发明轮子。
如果您的 UNION 太慢,请尝试查看您的数据库是否可以使用更好的索引。与 UNION 选项相比,您还应该对各个查询进行一些时序分析。我希望一个或其他查询是缓慢的位,而不是 UNION。
如果该联合需要太多时间才能完成,那么您应该考虑更改您使用的表上的索引。
你检查过你的索引碎片吗?
如果您可以通过这种方式加快查询速度,请查看是否添加了正确的索引。我不认为像这样使用一段时间会比联合所有更快。