仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 929|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL教程之经由过程剖析SQL语句的实行企图优化SQL(五)

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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解决方案时,客户可能需要部署、迁移、支持、异地备份、系统集成和灾难恢复等方面的帮助。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-18 18:23:11 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
老尸 该用户已被删除
板凳
发表于 2015-1-23 07:13:37 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
第二个灵魂 该用户已被删除
地板
发表于 2015-1-31 15:38:59 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
5#
发表于 2015-2-6 20:29:00 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
再现理想 该用户已被删除
6#
发表于 2015-2-18 15:03:38 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
兰色精灵 该用户已被删除
7#
发表于 2015-3-6 08:28:00 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
因胸联盟 该用户已被删除
8#
发表于 2015-3-12 23:39:20 | 只看该作者
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
若天明 该用户已被删除
9#
发表于 2015-3-20 06:08:47 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 11:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表