---- 方法一:一共10张表关联,返回行数57962,用时9秒
select 
User_Name,User_Type_Name,User_Role_Name,User_Grade_Name
,Courses_Name,Courses_Attribute_Name,Courses_Product_Name,Courses_Category_Name
,Year,Month,Date
from factLoginCourses a
inner join dimUser b on a.User_key=b.User_key
inner join dimCourses c on a.Courses_Key=c.Courses_Key
inner join dimUserGrade f on b.UserGrade_Key=f.UserGrade_Key
inner join dimUserRole g on b.UserRole_Key=g.UserRole_Key
inner join dimUserType h on b.UserType_Key=h.UserType_Key
inner join dimCoursesProduct i on c.CoursesProduct_key=i.CoursesProduct_key
inner join dimCoursesAttribute j on c.CoursesAttribute_key=j.CoursesAttribute_key
inner join dimCoursesCategory k on c.CoursesCategory_key=k.CoursesCategory_key
inner join dimDate m on a.Date_Key=m.Date_Key
---- 方法二:我把一些属性直接合并到相对应的表里了,一共4张表关联,返回行数57962,却用时15秒
select 
User_Name,UserType_Name,UserRole_Name,UserGrade_Name
,Courses_Name,CoursesAttribute_Name,CoursesProduct_Name,CoursesCategory_Name
,Year,Month,Date
from factLoginCourses a
inner join dimUserInfo b on a.User_key=b.User_key
inner join dimCoursesInfo c on a.Courses_Key=c.Courses_Key
inner join dimDate m on a.Date_Key=m.Date_Key----这是什么原因呢??理论上我减少了连接次数,应该更快才对呀

解决方案 »

  1.   

    分别选中sql 查看执行计划,Ctrl + L
      

  2.   

    本身sql语句不一样就没有可比性
      

  3.   


    inner join的表中,下面的语句比上面多出两个表:
    ----inner join dimUserInfo b on a.User_key=b.User_key
    ----inner join dimCoursesInfo c on a.Courses_Key=c.Courses_Key这样确实是不具备可比性的。
      

  4.   


    dimUserInfo ,dimCoursesInfo 与原来的 dimUser ,dimCourses是一样的,就是改了一下名字,把里面对应的类型有ID换成了Name,这样就减少了需要查看Name是还需要join另外一张表
    数据行数没有增加的
      

  5.   

    我详细说一下,本来按照三级范式,把用户的type,Role,Grade单独分成一张表去维护了,然后通过外健跟主表dimUser关联
    我现在是为了减少关联,直接把type,Role,Grade合并到dimUser中,构成dimUserInfo表,行数没有增加,列数也没有增加,就是把原来作为外健的User_Typ_ID,User_Role_ID,User_Grade_ID,换成对应User_Typ_Name,User_Role_Name,User_Grade_Name。
    dimCourses表也是一样,合并了3张表
    理论上应该会快呀,怎么反而慢了呢?
      

  6.   

    问一下,在查询分析器里返回的结果集有6万行,12个字段,
    如果存为txt文件是70兆,
    用时8秒,算正常吗?
      

  7.   

    我问个问题,查询的时候,表是这样连的:
    a-b-c-d和 这样连
    a-b-d
      |
      c查询的速度会不会不一样?
    貌似后者快?