日期:2014-05-18  浏览次数:20479 次

多表查询的优化问题?急!急!急!
我现在有几张表,数据量很大,有10万条左右。分别为:
a表:个人概总情况表(身份证号码【主键】,姓名,年龄,性别等等)
b表:个人学历情况表(身份证号码【主键】,学历,入学时间,毕业时间等等)
c表:个人工作情况表(身份证号码【主键】,工作单位,工作时间等等)
现在我要跨表查询,比如说我要查学历为本科的人的姓名或工作单位为***的人的姓名的数据,请给出一个最佳的优化的查询方案来,是不是用存储过程要快点啊?
最好能给个代码。谢谢!!!

------解决方案--------------------

select a.姓名 from a
where exists(select * from b where a.身份证号码=b.身份证号码 and 学历= '本科 ')
or exists(select * from c where a.身份证号码=b.身份证号码 and 工作单位= '*** ')
------解决方案--------------------
或者


Select
A.姓名
From
A, B, C
Where A.身份证号码 = B.身份证号码 And A.身份证号码 = C.身份证号码
And (B.学历 = '本科 ' Or C.工作单位 = '*** ')
------解决方案--------------------
创建一个存储过程如下:
create proc ptest
(
@EducationCertification varchar(50),
@CompangyName varchar(50)
)
as
select
from a inner join b on a.身份证号码=b.身份证号码
inner join c on a.身份证号码=c.身份证号码
where b.学历=@EducationCertification and c.工作单位=@CompangyName
go