从2个大型表中获取数据的比较统计信息的最有效方法是什么?回复SQL进行比较是否更好?或者使用LINQ在C#中执行它是否相当有效?如果我们在C#中这样做怎么办?
例如,我有2个oracle表:A和B. A和B具有相同的列:
一张表有大约80,000条记录; B表有大约20,000条记录。所需的比较如下:
对于每个位置:
A中有多少项与B中的项目匹配,且位置相同,类别相同,型号相同?
A中有多少项与B中的项目匹配,条件位置相同,类别相同但型号不同?
A中有多少项在B中,但位于不同的位置?
A中有多少项但B中没有?
感谢您的帮助!
答案 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
假设合理的索引,性能应该是好的。
鉴于您给我们的信息,最后两个问题
- A中有多少项在B中,但位于不同的位置?
- A中有多少项但B中没有?
醇>
无法回答,因为我们没有定义每个表格中唯一标识行的内容。