首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请教这样的语句该怎么优化,本地执行就需要10秒,总共约100万数据

2012-10-08 
请问这样的语句该如何优化,本地执行就需要10秒,总共约100万数据这里我举例说明我的需求,实际情况字段要比

请问这样的语句该如何优化,本地执行就需要10秒,总共约100万数据
这里我举例说明我的需求,实际情况字段要比下面的多好多。

人员表:t_person

SQL code
personid int, //主键,人员IDname varchar(32) //人员姓名


科目一考试表:t_km1
SQL code
id int, //主键,自增personid int,//人员IDstatus tinyint,//考试状态 0:未通过 1:通过examdate datetime//考试日期


科目二考试表:t_km2
SQL code
id int, //主键,自增personid int,//人员IDstatus tinyint,//考试状态 0:未通过 1:通过examdate datetime//考试日期


SQL语句的功能是:将科目一和科目二考试已经通过的人过滤掉,显示出那些有一科未通过或有两科未通过的人员。
我的SQL语句是这样写的:
SQL code
select * from v_km12 a where not exists (select personid from t_km1 where personid=a.personid and status=1 and exists (select personid from t_km2 where personid=a.personid and status=1))


其中v_km12是对以上三个表建立的视图,视图的内容是显示人员名称和最后一次的考试时间、考试成绩。视图没有问题。

[解决办法]
Sub-Select 效率不是很高。
你试试这个:

SQL code
with table as(  select personid from t_km1  where status = 0  union  select personid from t_km2  where status = 0  )select * from t_Personinner join table on table.personid = t_Person.personid 

热点排行