日期:2014-05-19  浏览次数:20405 次

请教一个有关索引的问题(高分送出)
两个有关学生成绩的表
A.学生成绩表
考试编码   年级编码   班级编码   学号编码   成绩   班排名   年排名   ...
-------------------------

B.学生总成绩表
考试编码   年级编码   班级编码   学号编码   总成绩   班排名   年排名   ...
--------------------------

要求:
1.每个年级的每次考试成绩记录数大约为1万条(行),基本上在一次输入后,不会轻易修改数据;
2.在成绩输入完成后,要对班排名/年排名,以及总成绩的班排名/年排名进行计算汇总;
3.A表可能在一定情况下会要求取总成绩的班排名或年排名,也就是说A表要与B表关联

需求:
因为成绩表和总成绩表的数据量会很大,如何对两个表设计索引,提高对成绩和总成绩的查询/更新/插入操作速度...




------解决方案--------------------
关注
------解决方案--------------------
貌似很难同时提高查询修改,插入等操作的吧,建立索引的同时就降低了插入的效率...
------解决方案--------------------
关注,学习.
------解决方案--------------------
是呀,我也想知道,难道这里没人会??
------解决方案--------------------
学习
------解决方案--------------------
在大型数据库,索引是为了加快查询速度.
通常用对where做条件的列,建立索引
------解决方案--------------------
A.学生成绩表
考试编码 年级编码 班级编码 学号编码 成绩 班排名 年排名 ...
-------------------------

B.学生总成绩表
考试编码 年级编码 班级编码 学号编码 总成绩 班排名 年排名 ...
--------------------------
先不说搂主讨论的索引问题,揣测一下数据表的结构吧:
A表--
考试编码 ,估计用于区别考试科目了,不知道1年级考的数学和2年级考的数学编码是否一样,那么上学期和下学期考数学是否一样?还是同一年级同一科目都是一个编码? 还是将考试编码设计成复合的,比如‘2005A3SX’2005年上学期3年级数学科目考试?
年级编码 ,估计区别同一个学生同一科目在不同年级时候的不同成绩吧,调取历史考试成绩应该游泳。也为年排名准备筛选条件了。
班级编码 ,区别不同的班级了
学号编码 ,
成绩 ,

班排名 ,???这个很有问题啊,按这样的结构,搂主的系统应该这样维护数据:增加、删除、修改一条记录的时候,遍历所有同一个班级的同一个考试编号 的同一个年级编号的所有记录,去修改遍历过的记录的当前字段 hoho

年排名 ,???这个比上面的还狠,按这样的结构,搂主的系统应该这样维护数据:增加、删除、修改一条记录的时候,遍历所有同一个年级的同一个考试编号 的所有记录,去修改遍历过的记录的当前字段 hoho hoho

另外修改(增、删) A 表中的任意一条记录,都要维护 B 表中的所有相关记录!!

不如这样:
A学生成绩

年度 , 级 , 班 , 科目 ,考试编号 ,学生(编号),成绩
---------------------------
2005年 3年级 2班 数学 第1次考试 001学生 120分

其实从整个系统考虑的话可能也不是这样,就说学生编号,至少能分辨出哪一年入学的吧,或还有其它信息,那有些机构又可以调整。

B表?! 还是用几个视图吧,SQL Server 几万条记录应该不会有多慢的。

总之,先把表结构设计好,才好讨论其它的。

------解决方案--------------------
简单分析一下A表,考试编码 年级编码 班级编码 学号编码 成绩 班排名 年排名
其中年级编码 班级编码 学号编码属于学生的个人信息,而其余字段为每次考试所有考试科目的明细,两者应该是属于master-detail的关系。个人认为不应该这样设计。
------解决方案--------------------
友情帮顶一下:)
------解决方案--------------------
早上來幫你頂一下,
索引這塊我也比較模糊,幫不上忙了
------解决方案--------------------
我记得微软书本上说过:
--------------------------
索引可以提高查询的速度
但是会降低插入、更新的速度
------------------------------------------------
lz要同时实现查询、更新和插入的功能,我还是学习了
------解决方案--------------------
up,楼上的观点是正确的
------解决方案--------------------

1> 建议这样设计,
设计一:
A表作为基础数据表,去掉B表
B表的数据由A表统计出来,几W数据优化查询和建立了索引,是很快的
可以专门写一个存储过程来统计.

设计二:
A表作为基础数据表,B表作为汇总表
B表数据由A表汇总,这个可以通过写一个存储过程,讲A表的数据汇总再插入B表
因为lZ说A表数据insert后基本很少去修改,
但是A表数据修改后,就不得不重新汇总B表了,这个是一个问题哟!
[如果是Oracle就好了,物化视图就是解决这个问题的好东西!!]