Create t_Table1(F_ID Int Primary Key, f_Name CHAR(32));Create t_Table2(F_ID Int Primary Key, f_Name CHAR(32), f_T1ID Int);Create t_Table3(F_ID Int, f_Type CHAR(1), f_TypeE CHAR(1), f_T2ID Int);因为我要统计t_Table3, 按照不同的t_Table3.f_Type统计f_TypeE,本来应该这样:Select t1.f_Name, t2.f_Name, count(t3.f_TypeE), count(t31.f_TypeE), count(t32.f_TypeE) From t_Table1 t1, t_Table2 t2 Left Join(t_Table3 t3, t_Table3 t31, t_Table3 t32) On (t3.f_T2ID = t2.F_ID AND t31.f_T2ID = t2.F_ID And t32.f_T2ID = t2.f_ID) Where t3.f_TypeE = 'A' And t31.f_TypeE = 'B' And t32.f_TypeE = 'C' And t2.f_T1ID = t1.F_ID Group By t1.f_Name, t2.f_Name;我觉得这样可能效率不行,所以在数据库中添加了一个视图:
Create View v_CountSome As Select F_T2ID, f_TypeE, Count(f_TypeE) As CountE From t_Table3 Group by f_ID, f_TypeE;
最后从数据库中读取的时候:Select t1.f_Name, t2.f_Name, t3.CountE, t4.CountE, t5.CountE From t_Table1, t_Table2 left join (v_CountSome t3, v_CountSome t4, v_CountSome t5) on (t2.f_T2ID = t_Table2.f_ID And t3.f_T2ID = t_Table2.f_ID And t4.f_T2ID = t_Table2.f_ID) Where t1.f_ID = t2.f_T1ID And t3.f_TypeE = 'A' And t4.f_TypeE = 'B' And t5.f_TypeE = 'C';请问哪种方式的效率更好?谢谢

解决方案 »

  1.   

    但是,另外一想,如果还需要加入其它条件的话
    t_Table是根据其它的条件筛选出数据再统计,
    而采用Select * From v_CountSome Where F_T2ID = xx的话,会先统计所有数据,然后再筛选,这样的话效率会更低.到底是直接从表中统计,还是中间加入视图再统计呢,哪样效率高?
      

  2.   

    你的SQL语句看得头晕。但VIEW对效率上的提高是极小的,只是减少了PARSE + OPTIMIZE 的时间,所以基本上没什么差别。
      

  3.   

    数据量多大?
    VIEW 可以提高安全性,效率与直接的SQL语句相差不大,
    你可以EXPLAIN SQL语句看看
      

  4.   

    viwe在性能上不一定比直接SQL语句高,你可以测试一下
      

  5.   

    用explain 跟踪下
    Select t1.f_Name, t2.f_Name, t3.CountE, t4.CountE, t5.CountE From t_Table1, t_Table2 left join (v_CountSome t3, v_CountSome t4, v_CountSome t5) on (t2.f_T2ID = t_Table2.f_ID And t3.f_T2ID = t_Table2.f_ID And t4.f_T2ID = t_Table2.f_ID) Where t1.f_ID = t2.f_T1ID And t3.f_TypeE = 'A' And t4.f_TypeE = 'B' And t5.f_TypeE = 'C'; 看看索引是否能跟意愿的一致没有?