1,相对在from表的时候,虽然列的瘦身不如行瘦身来的有效,但是当字段很多时,是否有必要进行列瘦身?
2,是不是所有的数据库表链接都是先做 表与表之间的笛卡尔积,再抽取符合条件的行?
3,join (left join ==) 是不是也是先做笛卡尔积?

解决方案 »

  1.   

    我的一个应用
    针对问题 1 
    ...
    LEFT JOIN (SELECT TeacherID,TeacherName AS InvigilateName FROM T_Teacher) AS invtea
    ON invtea.TeacherID = InvigilateID
    ...
    是否有必要这样写,这个Teacher有10+的字段针对问题 2,3
    ...
    LEFT JOIN (SELECT DataDictionaryID,DataDictionaryName AS LessonName FROM T_DataDictionary WHERE DataDictionaryType = 'Lesson') AS lesson
    ON lesson.DataDictionaryID = LessonID
    ...
    DataDictionaryType = 'Lesson'这个是写在 on后面还是就写在这里,效率是否一样?
     T_DataDictionary是一张复合表,有很多不同类型的记录,区分它们靠DataDictionaryType 
      

  2.   


    我是这么理解的:
    表连接-做笛卡尔积相当于嵌套for循环,将匹配的行连接起来。
    行瘦身会减少循环的次数,当然能提高效率;
    而列瘦身虽然减少了列,但是循环次数并不会较少,因此效率不会提高。