第07章节数据库设计.pptVIP

  • 4
  • 0
  • 约4.4千字
  • 约 29页
  • 2017-05-19 发布于四川
  • 举报
第07章节数据库设计

An Introduction to Database System 实例1---电信通话信息系统 问题描述 该系统投入运行后正常,四个月时开始出现复杂条件的查询得不到结果的情况。原因何在? 复杂条件的SQL语句查询造成超时; 发现是对单表查询,该表的记录数将近2000万条,且每天以20万条的速度增加; 由于查询数据表中的记录数过多引起的。 采用何种方法才能提高大数据量表的查询效率? 实例1---电信通话信息系统 实例1---电信通话信息系统 解决办法: 大数据量表的查询属于数据库优化的一个方面 优化原则:尽量减少I/O次数; 具体做法:采用水平分区的方法 将一个表分割成结构相同的几个表,每个表中只包含大表中的一部分数据行。查询时,就可以只查询包括查询结果在内的一、两个小表,使I/O数量大幅降低。 实例1---电信通话信息系统 具体实现: (1)以月份为单位将数据表拆分为多张小表; 实例1---电信通话信息系统 具体实现: (2)查询数据合并; 表分区减少了查询时I/O的数量,但是增加了查询时选择表的负担。 SQL Server通过使用分区视图将数据合并,利用单一视图面对应用程序,这样简化了查询数据操作。 实例1---电信通话信息系统 具体实现: (2)查询数据合并; 分区视图的定义为: CREATE VIEW Pm_hour_sector_history_view as select * from pm_hour_sector_200701 union all select * from pm_hour_sector_200702 union all …… 实例1---电信通话信息系统 具体实现: (3)查询优化的条件; 分区视图的核心内容:要求针对该视图执行的任何查询都被优化成只执行查询结果所涉及的基本表,其余表自动忽略。 对分区视图的限制:每张表必须建立check约束,限制该表存放的数据彼此的范围不重叠。这样,SQL Server才能做出相应的优化选择。 实例1---电信通话信息系统 具体实现: 为小表增加time_id字段,是numeric类型,存放时间信息,格式yymmddhhmm,如: pm_hour_sector_200701表建立的约束为: time_id between 200701010000 and 200701312359。 建立常用字段的非聚簇索引 (4)解决后的执行情况; 一条查询语句的执行情况: 前者的执行结果是20s,后者是2s。 实例1---电信通话信息系统 存在问题: 1.按时间存取数据的小表谁来创建? 手工还是程序? 2.小数据表增加以后,分布视图谁来负责更新? 3.小表和视图变动后,应用程序中用户的访问权是否受到影响? 4.数据以何种方式存储在小表中? 可更新的分区视图还是单独编写程序进行数据存储的? 实例1---电信通话信息系统 实践经验: 1.在数据表中,数据大于1000万时,建议分区解决 2.小于1000万时,采用对常用查询字段建立非聚簇索引的方式进行优化。 3.实例验证,使用SQL Server可以管理800G以上的数据案例。 实例2---全国人口查询系统 问题描述 公安部准备将全国各省市的人口基本信息采集入库,目前已经确定每个具有身份证的中华人民共和国公民的基本信息包括两大部分: 文本信息:150KB 图象信息:50KB 建成后系统供全国所有可能的用户使用,包括企业、学校、政府、旅店和其他个人用户等等。 实例2---全国人口查询系统 系统要求: 按照某些条件查询某一个人是否存在,详细信息 系统中的数据不会频繁更新 实例2---全国人口查询系统 1.海量信息存储的问题 假设13亿人口的信息将存入系统,这个数据库的容量达到多少?如果再加上一部分已死亡人的信息,数据量将更大。 解决方案:SAN—存储区域网络 海量存储系统将数据集中起来存放,并且将存放介质与数据库服务器物理上隔离开来,其扩展性非常好。 实例2---全国人口查询系统 2.选用什么样的DBMS? 数据库的容量过大,有没有一种DBMS可以管理几百 TB 的数据? 一个数据库的最大容量可达多少? 数据库中一张表的最大容量是多少(存放的记录数)? 解决方案: (1)需要将这些

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档