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

本文关键字:信息 统计 比较 是什么 方法 有效 数据 获取 两个 | 更新日期: 2023-09-27 18:01:05

从两个大表中获取数据比较统计信息的最有效方法是什么?是在SQL上回复进行比较更好,还是在C#中使用LINQ进行比较更有效?如果我们在C#中做,该怎么做?

例如,我有两个oracle表:A和B。A和B有相同的列:

  • 位置(字符串(
  • 类别(字符串(
  • new_model(是/否(
  • item_code(字符串(

一张表大约有80000条记录;B表有大约20000条记录。需要进行的比较如下。

对于每个位置:

  1. A中有多少项目与B中具有相同位置、相同类别和相同型号条件的项目相匹配?

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

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

  4. 有多少项目在A而不在B?

谢谢你的帮助!

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

让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. 有多少项目在A而不在B

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