从2个大表中获取数据的比较统计信息的最有效方法是什么

时间:2014-05-01 18:51:28

标签: c# sql oracle linq

从2个大型表中获取数据的比较统计信息的最有效方法是什么?回复SQL进行比较是否更好?或者使用LINQ在C#中执行它是否相当有效?如果我们在C#中这样做怎么办?

例如,我有2个oracle表:A和B. A和B具有相同的列:

  • 位置(字符串)
  • category(string)
  • new_model(是/否)
  • item_code(string)

一张表有大约80,000条记录; B表有大约20,000条记录。所需的比较如下:

对于每个位置:

  1. A中有多少项与B中的项目匹配,且位置相同,类别相同,型号相同?

  2. A中有多少项与B中的项目匹配,条件位置相同,类别相同但型号不同?

  3. A中有多少项在B中,但位于不同的位置?

  4. A中有多少项但B中没有?

  5. 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

让SQL引擎按照它的设计去做。

前两个问题很简单。给定这样的模式:

create table foo
(
  location  varchar(200) ,
  category  varchar(32)  ,
  new_model char(1)      check( new_model in ('Y','N') ) ,
  item_code varchar(32)  ,
)

create table bar
(
  location  varchar(200) ,
  category  varchar(32)  ,
  new_model char(1)      check( new_model in ('Y','N') ) ,
  item_code varchar(32)  ,
)

两个几乎完全相同的查询可以解决这个问题:

select a.location , count(*) as question_1
from foo a
join bar b on b.location  = a.location
          and b.category  = a.category
          and b.new_model = a.new_model
group by a.location
order by a.location

select a.location , count(*) as question_2
from foo a
join bar b on b.location   = a.location
          and b.category   = a.category
          and b.new_model != a.new_model
group by a.location
order by a.location

假设合理的索引,性能应该是好的。

鉴于您给我们的信息,最后两个问题

  
      
  1. A中有多少项在B中,但位于不同的位置?
  2.   
  3. A中有多少项但B中没有?
  4.   

无法回答,因为我们没有定义每个表格中唯一标识行的内容。