从两个大表中获取数据比较统计信息的最有效方法是什么
本文关键字:信息 统计 比较 是什么 方法 有效 数据 获取 两个 | 更新日期: 2023-09-27 18:01:05
从两个大表中获取数据比较统计信息的最有效方法是什么?是在SQL上回复进行比较更好,还是在C#中使用LINQ进行比较更有效?如果我们在C#中做,该怎么做?
例如,我有两个oracle表:A和B。A和B有相同的列:
- 位置(字符串(
- 类别(字符串(
- new_model(是/否(
- item_code(字符串(
一张表大约有80000条记录;B表有大约20000条记录。需要进行的比较如下。
对于每个位置:
-
A中有多少项目与B中具有相同位置、相同类别和相同型号条件的项目相匹配?
-
A中有多少项目与B中条件相同、类别相同但型号不同的项目相匹配?
-
A中有多少项目在B中,但在不同的位置?
-
有多少项目在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
假设索引合理,性能应该是好的。
根据您提供的信息,最后两个问题
- A中有多少项目在B中,但在不同的位置
- 有多少项目在A而不在B
无法回答,因为我们没有定义每个表中唯一标识行的内容。