数据库设计过程中,对于大批量的数据如何进行数据库优化

数据库设计过程中,对于大批量的数据如何进行数据库优化,第1张

实例讲解MYSQL数据的查询优化技术

作者:佚名 文章来源:未知 点击数:2538 更新时间:2006-1-19

数据库系统是管理信息系统的核心,基于数据库的联机事务处理(OLTP)以及联机分析处理(OLAP)是银行、企业、政府等部门最为重要的计算机应用之一。从大多数系统的应用实例来看,查询 *** 作在各种数据库 *** 作中所占据的比重最大,而查询 *** 作所基于的SELECT语句在SQL语句中又是代价最大的语句。举例来说,如果数据的量积累到一定的程度,比如一个银行的账户数据库表信息积累到上百万甚至上千万条记录,全表扫描一次往往需要数十分钟,甚至数小时。如果采用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟,由此可见查询优化技术的重要性。

笔者在应用项目的实施中发现,许多程序员在利用一些前端数据库开发工具(如PowerBuilder、Delphi等)开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。本文以应用实例为基础,结合数据库理论,介绍查询优化技术在现实系统中的运用。

分析问题

许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询规划是经过优化处理之后所产生的语句集合。DBMS处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给DBMS的查询优化器,优化器做完代数优化和存取路径的优化之后,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。在实际的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,这种优化能根据从系统字典表所得到的信息来估计不同的查询规划的代价,然后选择一个较优的规划。虽然现在的数据库产品在查询优化方面已经做得越来越好,但由用户提交的SQL语句是系统优化的基础,很难设想一个原本糟糕的查询计划经过系统的优化之后会变得高效,因此用户所写语句的优劣至关重要。系统所做查询优化我们暂不讨论,下面重点说明改善用户查询计划的解决方案。

解决问题

下面以关系数据库系统Informix为例,介绍改善用户查询计划的方法。

1.合理使用索引

索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:

●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by *** 作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁 *** 作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。

2.避免或简化排序

应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:

●索引中不包括一个或几个待排序的列;

●group by或order by子句中列的次序与索引的次序不一样;

●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取

在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。

还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序 *** 作:

SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008

虽然在customer_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:

SELECT * FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT * FROM orders WHERE order_num=1008

这样就能利用索引路径处理查询。

4.避免相关子查询

一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

5.避免困难的正规表达式

MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”

即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。

另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode[2,3]>“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。

6.使用临时表加速查询

把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序 *** 作,而且在其他方面还能简化优化器的工作。例如:

SELECT custname,rcvblesbalance,……other columns

FROM cust,rcvbles

WHERE custcustomer_id = rcvlbescustomer_id

AND rcvbllsbalance>0

AND custpostcode>“98000”

ORDER BY custname

如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序:

SELECT custname,rcvblesbalance,……other columns

FROM cust,rcvbles

WHERE custcustomer_id = rcvlbescustomer_id

AND rcvbllsbalance>0

ORDER BY custname

INTO TEMP cust_with_balance

然后以下面的方式在临时表中查询:

SELECT * FROM cust_with_balance

WHERE postcode>“98000”

临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O,所以查询工作量可以得到大幅减少。

注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。

7.用排序来取代非顺序存取

非顺序磁盘存取是最慢的 *** 作,表现在磁盘存取臂的来回移动。SQL语句隐藏了这一情况,使得我们在写应用程序时很容易写出要求存取大量非顺序页的查询。

有些时候,用数据库的排序能力来替代非顺序的存取能改进查询。

实例分析

下面我们举一个制造公司的例子来说明如何进行查询优化。制造公司数据库中包括3个表,模式如下所示:

1.part表

零件号 零件描述其他列

(part_num) (part_desc)(other column)

102,032 Seageat 30G disk ……

500,049 Novel 10M network card……

……

2.vendor表

厂商号厂商名其他列

(vendor _num) (vendor_name) (other column)

910,257 Seageat Corp ……

523,045 IBM Corp ……

……

3.parven表

零件号 厂商号 零件数量

(part_num) (vendor_num) (part_amount)

102,032910,2573,450,000

234,423321,0014,000,000

……

下面的查询将在这些表上定期运行,并产生关于所有零件数量的报表:

SELECT part_desc,vendor_name,part_amount

FROM part,vendor,parven

WHERE partpart_num=parvenpart_num

AND parvenvendor_num = vendorvendor_num

ORDER BY partpart_num

如果不建立索引,上述查询代码的开销将十分巨大。为此,我们在零件号和厂商号上建立索引。索引的建立避免了在嵌套中反复扫描。关于表与索引的统计信息如下:

表 行尺寸 行数量 每页行数量 数据页数量

(table) (row size) (Row count) (Rows/Pages) (Data Pages)

part150 10,00025 400

Vendor 150 1,000 25 40

Parven 13  15,000300 50

索引 键尺寸 每页键数量 页面数量

(Indexes) (Key Size) (Keys/Page) (Leaf Pages)

part 4500 20

Vendor4500 2

Parven8250 60

看起来是个相对简单的3表连接,但是其查询开销是很大的。通过查看系统表可以看到,在part_num上和vendor_num上有簇索引,因此索引是按照物理顺序存放的。parven表没有特定的存放次序。这些表的大小说明从缓冲页中非顺序存取的成功率很小。此语句的优化查询规划是:首先从part中顺序读取400页,然后再对parven表非顺序存取1万次,每次2页(一个索引页、一个数据页),总计2万个磁盘页,最后对vendor表非顺序存取15万次,合3万个磁盘页。可以看出在这个索引好的连接上花费的磁盘存取为504万次。

实际上,我们可以通过使用临时表分3个步骤来提高查询效率:

1.从parven表中按vendor_num的次序读数据:

SELECT part_num,vendor_num,price

FROM parven

ORDER BY vendor_num

INTO temp pv_by_vn

这个语句顺序读parven(50页),写一个临时表(50页),并排序。假定排序的开销为200页,总共是300页。

2.把临时表和vendor表连接,把结果输出到一个临时表,并按part_num排序:

SELECT pv_by_vn,* vendorvendor_num

FROM pv_by_vn,vendor

WHERE pv_by_vnvendor_num=vendorvendor_num

ORDER BY pv_by_vnpart_num

INTO TMP pvvn_by_pn

DROP TABLE pv_by_vn

这个查询读取pv_by_vn(50页),它通过索引存取vendor表15万次,但由于按vendor_num次序排列,实际上只是通过索引顺序地读vendor表(40+2=42页),输出的表每页约95行,共160页。写并存取这些页引发5*160=800次的读写,索引共读写892页。

3.把输出和part连接得到最后的结果:

SELECT pvvn_by_pn*,partpart_desc

FROM pvvn_by_pn,part

WHERE pvvn_by_pnpart_num=partpart_num

DROP TABLE pvvn_by_pn

这样,查询顺序地读pvvn_by_pn(160页),通过索引读part表15万次,由于建有索引,所以实际上进行1772次磁盘读写,优化比例为30∶1。笔者在Informix Dynamic

Sever上做同样的实验,发现在时间耗费上的优化比例为5∶1(如果增加数据量,比例可能会更大)。

小结

20%的代码用去了80%的时间,这是程序设计中的一个著名定律,在数据库应用程序中也同样如此。我们的优化要抓住关键问题,对于数据库应用程序来说,重点在于SQL的执行效率。查询优化的重点环节是使得数据库服务器少从磁盘中读数据以及顺序读页而不是非顺序读页。

数据仓库:为企业所有级别的决策制定过程,提供所有类型数据支持的战略(数据)集合。

大数据:所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。

传统数据库:一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

其实从三个定义,我们好像区别不大。

数据库指的是数据的集合,数据仓库也是一个数据集合,大数据也是一个处理和存储数据的地方。

但是不同的是,在于应用场景,和构建的技术原理不一样。

传统数据库是存储根据范式建模的关系型数据,主要用于OLTP(on-line transaction processing)翻译为联机事务处理的软件。大数据是根据map redurce范式构建的出局处理,存储的软件,主要用于OLAP是做分析处理。大数据和传统数据库,还有一个更大的区别在于,处理的数据量以及计算量的大小,当传统数据库,无法在人可以接受的短时间内计算出结果,那这个数据就叫大数据,需要使用到大数据技术处理。而数据仓库本质上是一种数据的处理方式,而不是一种基础软件,它可以依赖于传统数据库,也可以依赖大数据技术去构建。

可以参考这篇文章:数据仓库(2)数据仓库、大数据与传统数据库的区别 - 知乎 (zhihucom)

考点46物理设计的评价

数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对这些方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。

在数据库应用系统生存期中,总的开销包括:规划开销、设计开销、实施和测试开销、 *** 作开销、运行维护开销。评价物理数据库的方法完全依赖于所选用的DBMS。

420实现和维护

考点47数据库的实现

数据库实现的主要工作有以下几个方面:

(1)定义数据库结构。

(2)编制与调试应用程序。

(3)数据装载。

(4)数据库试运行。

考点48其他设计

其他设计工作包括加强数据库的安全性、完整性控制,以及保证一致性、可恢复性等,总是以牺牲效率为代价的。设计人员的任务就是要在实现代价和尽可能多的功能之间进行合理平衡。其他设计包括数据库的再组织设计、故障恢复方案设计、安全性考虑和事务控制等。

考点49数据库的运行和维护

在数据库运行阶段,对数据库经常性的维护工作主要是由DBA完成的,它包括以下几个方面:

(1)数据库的转储和恢复。

(2)数据库的安全性、完整性控制。

(3)数据库性能的监督、分析和改进。

(4)数据库的重组织和重构造。

421数据库管理系统概述

考点50 DBMS的系统目标

数据库管理系统(DBMS)是 *** 作和管理数据库的软件系统,它由一组计算机程序构成,管理并控制数据资源的使用。数据库管理系统是数据库系统的核心DBMS的目标是用户界面友好、结构清晰和开放性。

考点51 DBMS的基本功能

DBMS主要是实现对共享数据有效的组织、管理和存取。因此,DBMS具有如下几个方面的基本功能。

(1)数据库定义功能。

(2)数据存取功能。

(3)数据组织、存储和管理。

(4)数据库运行管理。

(5)数据库的建立和维护。

(6)通信功能和数据转换功能等。

考点52 DBMS程序模块的组成

大致来说,DBMS的程序模块可按功能划分为以下5个模块:

(1)数据定义方面的程序模块。

(2)数据 *** 纵方面的程序模块

(3)数据库运行管理方面的程序模块

(4)数据库组织、存储和管理方面的程序模块。

(5)数据库建立、维护和其他方面的程序模块。

考点53 DBMS的层次结构

可以将DBMS划分成若干层次,这样可以帮助我们更清晰地认识DBMS,更重要的是有助于DBMS的设计和维护。

(1)最上层是应用层位于DBMS核心之外。

(2)第二层是语言翻译处理层它处理的对象是数据库语言}A SQL,

(3)第三层是数据存取层:该层处理的对象是单个元组。

(4)第四层是数据存储层。该层处理的对象是数据页和系统缓冲区。

(5) *** 作系统是DBMS的基础。它处理的对象是数据文件的物理块。

422新的应用需求对DBMS的挑战

考点54新的应用需求对DBMS的挑战

由于现在以关系型数据库管理系统(RDBMS )为主流。这些新应用需求要求数据库管理系统应该具有支持分布式 *** 作、联机事务处理能力、决策支持能力、支持多媒体、大容量、复杂数据应用、兼容性和集成能力、异种数据库之间的互访能力、系统可靠性、安全性、大型系统等方面的管理能力。

在我国,当前流行的数据库管理系统绝大多数是关系型数据库管理系统,一般可分为如下3类:

(1)以PC机、微型机系统为运行环境的数据库管理系统。

(2)以Oracle为代表的数据库管理系统,这类系统还有IBM DB2,Sybase等,也被称为主流数据库管理系统。

(3)以Microsoft SQI Server为代表的介于以上两类之间的数据库管理系统。

423 Oracle数据库系统

考点55Oracle数据库系统简介

Oracle关系型数据库管理系统是美国Oracle公司的优秀软件产品,它采用SQL语言作为数据库语言。该公司于1979年推出了世界上第一个商业化的关系型数据库系统。

Oracle数据库的特点包括兼容性、可移植性、可连接性及高的生产率。

考点56 Oracle的主要产品及其功能

1Oracle数据库服务霖功能及其特色

Oracle数据库服务器包括标准服务器和许多可选的服务器选件,选件用于扩展标准服务器的功能,以适应特殊的应用需求。

(1)标准服务器主要具有下列特色:多进程多线索的体系结构、高性能核心技术、高可用性和SQL的实现。

(2)并行服务器选件(paralle server option)和并行查询选件(paralle query option)。

(3)分布式选件(distributed)。

(4)过程化选件(procedural option)。

2Oracle的工具产品及其功能

为方便用户开发数据库应用程序,Oracle提供了众多工具供用户选择使用,主要包括以下几个方面:

(1)Developer/2000。它是Oracle的一个较新的应用开发工具集,包括Oracle Forms, Oracle Reports,Oracle Graphics和Oracle Books等多种工具,用来实现高生产率、大型事务处理及客户/服务器结构的应用系统。

(2)Designer/2000 。它是Oracle提供的CASE工具,能够帮助用户对复杂系统进行建模、分析和设计,由BPR、Modellers、Generators等组成。

(3 ) Discoverer/2000。它是一个OLAP工具,主要用于支持数据仓库应用。

(4)Oracle Office。它是用于办公自动化的,能完成企业范围内的消息接收与发送。

(5)SQL DBA 。SQL DBN 是一个易于使用的。菜单驱动的DNA实用工具,可供用户进行动态性能监视、远程DB管理等。

424 IBM DB2数据库系统

考点58 IBM DB2数据库系统简介

IBM DB2数据库系统是美国IBM公司的产品1973年位于美国加州圣荷西市的IBM研究中心开始了一个大的关系型数据库系统研究项目jvstem R,探讨并验证在多用户与大量数据下关系型数据库的实际可行性。

考点59 DB2通用数据库的功能和特色

DB2家族除r包含在各种平台土运行的数据库管理系统内核之外,产品包中还包括了数据复制、数据库系统管理、Internet网关支持、在线分析处理、多媒体支持和各种并行处理能力,并为所有平台上的异构数据库访问提供‘中间件”解决方案。

DB2通用数据库(LDB)V7 1的特色包括支持Internet应用、支持面向对象和多媒体应用、支持联机分析处理和了干行处理能力。

考点60 IBM的商务智能解决方案

商务智能解决方案的基本结构往往包含以下3个部分:

(1)数据仓库,用于抽取、整和、分布、存储有用的信息。

(2)多维分析模型,全方位了解现状。

(3)前台分析工具,提供简单易用的图形化界面给管理人员。

考点61 IBM内容管理解决方案

(1) IBM Content Manager On Demand它可以完成电子存储、回取、分发、打印和传真,在极短的时间内就可以在显示器上获得与原来提供给客户的一模一样的报表/账单及其他计算机的输出信息。

(2)Digital Library IBM数字图书馆技术使人们快速而廉价地管理、访问、保护及传递大量多种多样的资料成为可能。这种数字化工作流程包含了一系列最新信息技术。

425 Sybase数据库系统

考点62 Svbase数据库简介

Sybase是美国Sybase公司的产品。1986年正式推出Sybase数据库系统。 Sybase在新兴的EP发展策略中充分利用了已有的核心产品和战略优势,提供了满足电子商务需求的解决方案。

考点63Sybase数据库系统的功能及其特色

目前,Sybase数据库系统定位在4个方向,分别在企业解决方案,Internet应用、商务智能和移动与嵌人计算领域为客户提供先进的技术:

企业解决方案包括企业级数据库、数据复制和数据访问。主要产品有:Sybase EP,Adaptive Server Enter-prise、Adaptive Server Replication、Adaptive Server Connect及异构数据库互联选件。

426 IBS-SQL Server数据库系统

考点64 MS-SQL Server数据库系统

MS-SQL Server数据库系统是美国Microsoft公司的产品。MS-SQL Server数据库系统是在Svbase SQL erver 4的版本基础上发展起来的。目前Microsoft SQL Server 7 0和Microsoft SQL Server 2000广泛使用于我国的各行各业,包括许多政府部门。

考点65 Microsoft SQL Server系统主要功能及其特性

1数据库服备器MS-SQI, Server

MS-SQL决rver数据库系统的核心是Microsoft SQL Server,简称MS-SQL Server或SQL Server,它有70、2000和2005三个主要版本。

2MS-SQL Server 2000的主要功能及其特色

MS-SQL Server 2000的主要功能有充分的Web支持、高度可伸缩性和可靠性、最快投放市场、充分的数据仓库功能和广泛的支持电子商务功能。

考点66 SQL Server 2000多版本支持

SQL Server 2000提供了各种不同的版本,包括SQL Server 2000企业版、SQL Server 2000标准版、SQLServer 2000个人版、SQL Server 2000开发人员版,SQL Server 2000企业评估版,SQL Server 2000桌面引擎和SQL Server 2000 Windows CE版

以上就是关于数据库设计过程中,对于大批量的数据如何进行数据库优化全部的内容,包括:数据库设计过程中,对于大批量的数据如何进行数据库优化、详解数据仓库和数据库的区别、全国计算机三级数据库考点分析之数据库系统基本原理[5]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9546647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存