想效率高的话当然是单表90条记录效率高
不过扩展性就太差了
如果以后不是80道题,而是150道题呢?而且两个表各有8个字段,从表600条对应主表1条?这怎么转换的,完全看不懂.
按你前面的设计,应该是有10个字段是学生信息,80个字段是答案
你就只把那80个字段从列变成行,80行2列(一列主键关联到主表外键,另一列vchar)
不用再把学生信息都带出来了啊.

解决方案 »

  1.   

    交卷时因为要做成绩的计算和统计,不知道这个超时是数据方面超时还是web程序超时,如何查找及排除呢。
      

  2.   

    尽量不用select * form tabelname这样的语句,用哪个字段就查询哪个字段,还有就是第二种情况比较靠谱,第一种情况不可取。
      

  3.   

    说的太笼统了,根本无法分析。200多人交卷,这个要保存数据把,那么你是怎么保存的。两张表,只往一张表里存,还是同时往两个表里存。一个人交卷要保存多少条记录?这些都不说,怎么帮你分析呢?
    其实呢有个最快的方法。交卷的时候,在客户端把答案拼接成json或者xml,或者用逗号分隔,然后一起提交,然后作为一个字段来保存。等都交卷完毕之后,在把这个json打开,一条一条的处理,这个时候慢就慢点,不会报错了。
      

  4.   

    另外为啥是 varchar(20)?而不是 nvarchar(20)
    或者nchar(20)选择题?填空题?不能是问答题吧。
      

  5.   

    成绩计算应该是等查询的时候做的工作吧,刚交卷统计这个干吗...
    交卷不就是将答案保存么.
    你说如果监考老师一边收卷一边判卷,能不慢么.估计选择题里面存的就是ABCD,填空题里面存的就是答案,无非就是图省事,都弄成一个类型的罢了...
      

  6.   

    第一种情况:一个表,一条记录,90个字段,有80个字段是varchar(20)类型。
    第二种情况:两个表各有8个字段,主表只有一条记录,从表关联对应有600条记录,字段半数为varchar(20)类型。这两种情况,我写了个程序去测试了一下所用的时间,相差还挺大;
    第一种情况基本上不占用时间;
    第二种需要2~3秒的时间,这只是一个人,如果是200人,会不会是要用400~600秒呀。而且我对程序也做了个测试,在成绩统计逻辑基本上是占用1秒的时间,更新数据库占用了约4~5秒;
    mxBLL.Update(mxModelLs);   这是题目明细表,一题有600条记录
    tmBLL.Update(tmModelLs);   这是题目表,一个人24题,即24条记录。
    dtBLL.Update(dtModel);    这是人员考试表,一个人一条记录这三条执行时耗时最严重,如否优化。
      

  7.   

    如果只是记录ABCD的话,nchar(1)就可以了。============交卷的时候为啥 mxBLL.Update(mxModelLs);