大数据量如何做查询好?

powerc1 2003-12-06 08:12:40
目前要做个学校方面的成绩查询系统,要求就是学生只要输入姓名或学号信息就可以查出其在学校期间所有的考试成绩资料,我是这样想的,在后台给每个老师上传成绩的权限,老师可以将每次考试的成绩在后台上传发布,发布成绩时,把成绩统统放到一个表中这样学生就可以查询到每次考试的成绩了,但是好像这种想法也不太现实,如果一个学校班级多考试也多的话那一个access中的表可能连一个学期的考试都没有办法保存得完(请问access中的表中可以保存多少条记录?)不过如果不这样办的话要达到“学生只要输入姓名或学号信息就可以查出其在学校期间所有的考试成绩资料”又很难办到,请问怎么办?
...全文
79 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mudsong 2003-12-07
  • 打赏
  • 举报
回复
学生表a(id,name)
考试科目表b(id,name)
成绩表c(id,userid,itemid,result)

a.id一对多c.userid
b.id一对多c.itemid
mudsong 2003-12-07
  • 打赏
  • 举报
回复
先根据学生的ID,查询,这样,成绩表对应的学生ID的成绩就会很少,查询就快
wanghr100 2003-12-07
  • 打赏
  • 举报
回复
//如果可能的话用SQL SERVER.

可以学习学习.

如何优化数据库的性能

1、 硬件调整性能
最有可能影响性能的是磁盘和网络吞吐量,解决办法
扩大虚拟内存,并保证有足够可以扩充的空间;把数据库服务器上的不必要服务关闭掉
把数据库服务器和主域服务器分开
把SQL数据库服务器的吞吐量调为最大
在具有一个以上处理器的机器上运行SQL
2、 调整数据库
若对该表的查询频率比较高,则建立索引;建立索引时,想尽对该表的所有查询搜索操作, 按照where选择条件建立索引,尽量为整型键建立为有且只有一个簇集索引,数据在物理上按顺序在数据页上,缩短查找范围,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不可太多,执行UPDATE DELETE INSERT语句需要用于维护这些索引的开销量急剧增加;避免在索引中有太多的索引键;避免使用大型数据类型的列为索引;保证每个索引键值有少数行。
3、 使用存储过程
应用程序的实现过程中,能够采用存储过程实现的对数据库的操作尽量通过存储过程来实现,因为存储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应用可以简单地执行存储过程,并且只返回结果集或者数值,这样不仅可以使程序模块化,同时提高响应速度,减少网络流量,并且通过输入参数接受输入,使得在应用中完成逻辑的一致性实现。
4、 应用程序结构和算法
建立查询条件索引仅仅是提高速度的前提条件,响应速度的提高还依赖于对索引的使用。因为人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,特别是对数据量不是特别大的数据库操作时,是否建立索引和使用索引的好坏对程序的响应速度并不大,因此程序员在书写程序时就忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在数据量特别大时或者大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!
因此在书写应用程序的SQL的 where子句时,注意以下几种情况:
1、避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如:
SELECT name FROM employee WHERE salary > 60000
在这条语句中,如salary字段是money型的,则优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。
2、避免对搜索参数使用其它数学操作符,如要将
SELECT name FROM employee WHERE SUBSTRING(id, 1, 1) = 'B'
SELECT name FROM emplyee WHERE salary * 12 > 30000
写成为:
SELECT name FROM employee WHERE id like ‘B%'
SELECT name FROM emplyee WHERE salary > 3000
3、、避免使用!=或<>等这样的操作符,因为这会使系统无法使用索引,而只能直接搜索表中的数据。例如:
SELECT id FROM employeeWHERE id != 'B%'
优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。
4、在应用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符如select * 语句;尽量不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。
上面我们提到的是一些基本的提高查询速度的注意事项,但是在更多的情况下,程序员往往需要反复试验比较不同的语句以得到最佳方案。此外更为重要的是需要数据库管理员在数据库的服务器一端调整数据库管理系统的参数,以得到更快的响应性能。
skyboy0720 2003-12-07
  • 打赏
  • 举报
回复
就是能SQL 最好用,然后写成PROCDURE,
速度应该不成问题!
Struggling 2003-12-07
  • 打赏
  • 举报
回复
建议用sql server
access确实会有问题
mudsong 2003-12-06
  • 打赏
  • 举报
回复
就是 select * from 表A join 表B on A.id=B.id

在sql server里可以建立表关系(如A.id与B.id,是一对多关系),对表之间进行约制
这样可以一层一层关联下去,使数据库更规范化
powerc1 2003-12-06
  • 打赏
  • 举报
回复
如果只能用ACCESS呢?请问怎么用关联查找?
mudsong 2003-12-06
  • 打赏
  • 举报
回复
用sql server存储过程来做
建立索引,加快查询速度,数据库尽量要规范化

用关联查找,只要查找一个学生,所有的成绩都能查到
成绩可以按学期来分,这样不至于表过大查询慢
flying310 2003-12-06
  • 打赏
  • 举报
回复
改用sql server好了.
powerc1 2003-12-06
  • 打赏
  • 举报
回复
如何优化?
美丽心情 2003-12-06
  • 打赏
  • 举报
回复
学生一个表~~

每次考试成绩一个~~(里面基本都是INT类型的,查询速度应该没有问题~~)

几万应该没有问题~~如果优化好了~~

实在不行用SQL SERVER~~
chonboy 2003-12-06
  • 打赏
  • 举报
回复
放心存,只要硬盘够大

数据量大可以先用“姓名或学号信息”查得学生ID,用数字匹配记录要比字符、再关联表快

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧