|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
列举选择MySQL的理由的最困难的地方在于,如何对这些理由进行排序。MySQL学习教程这就如同我们经常争论的故事:先有鸡还是先有蛋?Rowid的观点:
rowid是一个伪列,既然是伪列,那末这个列就不是用户界说,而是体系本人给加上的。对每一个表都有一个rowid的伪列,可是表中其实不物理存储ROWID列的值。不外你能够像利用别的列那样利用它,可是不克不及删除改列,也不克不及对该列的值举行修正、拔出。一旦一行数据拔出数据库,则rowid在该行的性命周期内是独一的,即即便该行发生行迁徙,行的rowid也不会改动。
为何利用ROWID
rowid对会见一个表中的给定的行供应了最快的会见办法,经由过程ROWID能够间接定位到响应的数据块上,然后将其读到内存。我们创立一个索引时,该索引不仅存储索引列的值,并且也存储索引值所对应的行的ROWID,如许我们经由过程索引疾速找到响应行的ROWID后,经由过程该ROWID,就能够敏捷将数据查询出来。这也就是我们利用索引查询时,速率对照快的缘故原由。
在Oracle8之前的版本中,ROWID由FILE、BLOCK、ROWNUMBER组成。跟着oracle8中工具观点的扩大,ROWID产生了变更,ROWID由OBJECT、FILE、BLOCK、ROWNUMBER组成。使用DBMS_ROWID能够将rowid分化成上述的各部分,也能够将上述的各部分构成一个无效的rowid。
RecursiveSQL观点
偶然为了实行用户收回的一个sql语句,Oracle必需实行一些分外的语句,我们将这些分外的语句称之为recursivecalls或recursiveSQLstatements。如当一个DDL语句收回后,ORACLE老是隐含的收回一些recursiveSQL语句,来修正数据字典信息,以便用户能够乐成的实行该DDL语句。当必要的数据字典信息没有在共享内存中时,常常会产生Recursivecalls,这些Recursivecalls会将数据字典信息从硬盘读进内存中。用户不比体贴这些recursiveSQL语句的实行情形,在必要的时分,ORACLE会主动的在外部实行这些语句。固然DML语句与SELECT都大概引发recursiveSQL。复杂的说,我们能够将触发器视为recursiveSQL。
RowSource(行源)
用在查询中,由上一操纵前往的切合前提的行的汇合,便可所以表的全体行数据的汇合;也能够是表的部分行数据的汇合;也能够为对上2个rowsource举行毗连操纵(如join毗连)后失掉的行数据汇合。
PRedicate(谓词)
一个查询中的WHERE限定前提
DrivingTable(驱动表)
该表又称为外层表(OUTERTABLE)。这个观点用于嵌套与HASH毗连中。假如该rowsource前往较多的行数据,则对一切的后续操纵有负面影响。注重此处固然翻译为驱动表,但实践上翻译为驱动行源(drivingrowsource)更加切实。一样平常说来,是使用查询的限定前提后,前往较少行源的表作为驱动表,以是假如一个年夜表在WHERE前提有无限制前提(如等值限定),则该年夜表作为驱动表也是符合的,以是并非只要较小的表能够作为驱动表,准确说法应当为使用查询的限定前提后,前往较少行源的表作为驱动表。在实行企图中,应当为靠上的谁人rowsource,前面会给出详细申明。在我们前面的形貌中,一样平常将该表称为毗连操纵的rowsource1。
ProbedTable(被探查表)
该表又称为内层表(INNERTABLE)。在我们从驱动表中失掉详细一行的数据后,在该表中寻觅切合毗连前提的行。以是该表应该为年夜表(实践上应当为前往较年夜rowsource的表)且响应的列上应当有索引。在我们前面的形貌中,一样平常将该表称为毗连操纵的rowsource2。
组合索引(concatenatedindex)
由多个列组成的索引,如createindexidx_emponemp(col1,col2,col3,……),则我们称idx_emp索引为组合索引。在组合索引中有一个主要的观点:引诱列(leadingcolumn),在下面的例子中,col1列为引诱列。当我们举行查询时可使用”wherecol1=?”,也能够利用”wherecol1=?andcol2=?”,如许的限定前提城市利用索引,可是”wherecol2=?”查询就不会利用该索引。以是限定前提中包括先导列时,该限定前提才会利用该组合索引。
可选择性(selectivity):
对照一以下中独一键的数目和表中的行数,就能够判别该列的可选择性。假如该列的”独一键的数目/表中的行数”的比值越靠近1,则该列的可选择性越高,该列就越合适创立索引,一样索引的可选择性也越高。在可选择性高的列长进行查询时,前往的数据就较少,对照合适利用索引查询。
有了这些背景常识后就入手下手先容实行企图。为了实行语句,Oracle大概必需完成很多步骤。这些步骤中的每步多是从数据库中物理检索数据行,大概用某种办法筹办数据行,供收回语句的用户利用。Oracle用来实行语句的这些步骤的组合被称之为实行企图。实行企图是SQL优化中最为庞大也是最为关头的部分,只要晓得了ORACLE在外部究竟是怎样实行该SQL语句后,我们才干晓得优化器选择的实行企图是不是为最优的。实行企图关于DBA来讲,就象财政报表关于财政职员一样主要。以是我们面对的成绩次要是:怎样失掉实行企图;怎样剖析实行企图,从而找出影响功能的次要成绩。上面先从剖析树型实行企图入手下手先容,然后先容怎样失掉实行企图,再先容怎样剖析实行企图。
举例:
这个例子显现关于上面SQL语句的实行企图。
SELECTename,job,sal,dname
FROMemp,dept
WHEREemp.deptno=derpt.deptno
ANDNOTEXISTS
(SELECT*
FROMsalgrade
WHEREemp.salBETWEENlosalANDhisal);
此语句查询薪水不在任何倡议薪水局限内的一切雇员的名字,事情,薪水和部门名。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044672.aspxDBaaS并不意味着解决方案提供者要让自己失业。与其他系统一样,在实施DBaaS解决方案时,客户可能需要部署、迁移、支持、异地备份、系统集成和灾难恢复等方面的帮助。 |
|