下面是我做的一个测试:
GradeAdd是一个成绩表,我想查询出这个表中的所有成绩select  GradeAdd.ks_zkz as 准考证号,to_char(GradeAdd.kc_dm,'fm00000') as 课程代码,jc_kcxx.kc_mc as 课程名称,bk_cj as 成绩,bp_kksj.kksj_date as 开考时间
from GradeAdd,bp_kksj,jc_kcxx where GradeAdd.kc_dm=jc_kcxx.kc_dm and GradeAdd.kksj_i = bp_kksj.kksj_i;
这完全是GradeAdd,bp_kksj,jc_kcxx三个表作笛卡儿积关联,没有作记录筛选。速度很慢!由于GradeAdd的ks_zkz暂时只有010497601081,010497601082,010497601083这三个值,所以我按照下面的方式检索出来的纪录集和上面是一样的。select  ks_zkz as 准考证号,to_char(GradeAdd.kc_dm,'fm00000') as 课程代码,kc_mc,bk_cj as 成绩,kksj_date as 开考时间
from GradeAdd,bp_kksj,jc_kcxx where (ks_zkz='010497601081' or ks_zkz='010497601082' or ks_zkz='010497601083') and GradeAdd.kc_dm=jc_kcxx.kc_dm and GradeAdd.kksj_i =bp_kksj.kksj_i;这样查询出来的速度比上面快多了,请问这是什么原因,我该怎么对第一种查询作优化呢,请高手指教!(不知道问题说清楚没有)

解决方案 »

  1.   

    楼上的可能没看明白我的意思。再说明一下:
    GradeAdd(成绩表)为:
    ks_zkz(准考证号),kc_dm(课程代码),bk_cj(课程成绩),kksj_i(考试时间号) 
    jc_kcxx(课程表)为:
    kc_dm(课程代码),kc_mc(课程名称)
    bp_kksj(考试时间表)为:
    kksj_i(考试时间),kksj_Date(时间)这三个表中只有bp_kksj的纪录较多,估计几万条。前面2个表只是随便建立了一些测试数据。不知道为什么第一种查询为什么花的时间比第二种长这么多?有高手能解释一下吗? 谢谢!