一个数据库
里有如下表
学院表下有如下字段:
 xydh(代号) xymc(名称)专业表下有如下字段:
 zydh(代号) zymc(名称)班级表下有如下字段:
 bjdh(班级代号) bjmc(名称)
学生表 下有如下字段:
 bjdh()、zydh xydh现在的问题是
学生表有2万条记录、院系表有十几条记录、专业有几十条记录、班级表有400条记录我怕联合查询速度过慢,是否
学生表加上冗余字段 bjmc(班级名称) xymc(学院名称)  zymc(专业名称)

解决方案 »

  1.   

    学生表加上冗余字段 bjmc(班级名称) xymc(学院名称) zymc(专业名称)不必要这么做。
    班级,学员,专业这3个表的信息在学生表里存的都是主键ID,联合查询的时候效率很高。直接UNION各个表去取信息就可以了。如果你冗余出名称来,并不能起到效率的提升。
    比如要查学院是‘计算机的’,
    用冗余字段查询为(传入的条件为字符串‘计算机’)
    select * from student where xymc='计算机';不用冗余字段(传入的条件为计算机系的ID
    select * from studnt where xydh=100;很明显下面的效率高。
      

  2.   


    除了学生表记录有些多之外,其它表的记录过少,根本不会对JOIN查询有多大的影响。所以不需要去添加冗余字段。
    适当加上索引即可。
      

  3.   

    不要建立这个冗余字段,这就破坏了数据库的结构了,对数据的变动很不利.
    建议查询的时候对sql语句进行优化,比如先过滤数目最大的学生