仓酷云

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

[学习教程] MYSQL教程之利用智能优化器进步Oracle的功能极限

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

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

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

x
曾经的功能列表可能会迅速变得过时了。而且,有些功能对有的应用程序非常重要,但是对别的应用程序则不一定。oracle|功能|优化

利用智能优化器进步Oracle的功能极限
损耗在筹办新的SQL语句的工夫是OracleSQL语句实行工夫的最主要的构成部分。可是经由过程了解Oracle外部发生实行企图的机制,你可以把持Oracle消费在评价毗连按次的工夫数目,而且能在大致上进步查询功能。
筹办实行SQL语句
当SQL语句进进Oracle的库缓存后,在该语句筹办实行之前,将实行以下步骤:

1)语法反省:反省SQL语句拼写是不是准确和词序。

2)语义剖析:核实一切的与数据字典纷歧致的表和列的名字。

3)表面存储反省:反省数据字典,以断定该SQL语句的表面是不是已存在。

4)天生实行企图:利用基于本钱的优化划定规矩和数据字典中的统计表来决意最好实行企图。

5)创建二进制代码:基于实行企图,Oracle天生二进制实行代码。

一旦为实行筹办好了SQL语句,今后的实行将很快产生,由于Oracle承认统一个SQL语句,而且重用那些语句的实行。但是,关于天生特别的SQL语句,或嵌进了笔墨变量的SQL语句的体系,SQL实行企图的天生工夫就很主要了,而且前一个实行企图一般不克不及够被重用。对那些毗连了良多表的查询,Oracle必要消费大批的工夫来检测毗连这些表的得当按次。
评价表的毗连按次
在SQL语句的筹办过程当中,消费最多的步骤是天生实行企图,出格是处置有多个表毗连的查询。当Oracle评价表的毗连按次时,它必需思索到表之间一切大概的毗连。比方:六个表的之间毗连有720(6的阶乘,或6*5*4*3*2*1=720)种大概的毗连线路。当一个查询中含有凌驾10个表的毗连时,分列的成绩将变得更加明显。关于15个表之间的毗连,必要评价的大概查询分列将凌驾1万亿(正确的数字是1,307,674,368,000)种。
利用optimizer_search_limit参数来设定限定
经由过程利用optimizer_search_limit参数,你可以指定被优化器用来评价的最年夜的毗连组合数目。利用这个参数,我们将可以避免优化器损耗不定命量的工夫来评价一切大概的毗连组合。假如在查询中表的数量小于optimizer_search_limit的值,优化器将反省一切大概的毗连组合。

比方:有五个表毗连的查询将有120(5!=5*4*3*2*1=120)种大概的毗连组合,因而假如optimizer_search_limit即是5(默许值),则优化器将评价一切的120种大概。optimizer_search_limit参数也把持着挪用带星号的毗连提醒的阀值。当查询中的表的数量比optimizer_search_limit小时,带星号的提醒将被优先思索。
另外一个工具:参数optimizer_max_permutations
初始化参数optimizer_max_permutations界说了优化器所思索组合数量的下限,且依附于初始参数optimizer_search_limit。optimizer_max_permutations的默许值是80,000。

参数optimizer_search_limit和optimizer_max_permutations一同来断定优化器所思索的组合数量的下限:除非(表或组合数量)凌驾参数optimizer_search_limit大概optimizer_max_permutations设定的值,不然优化器将天生一切大概的毗连组合。一旦优化器中断评价表的毗连组合,它将选择本钱最低的组合。
利用ordered提醒指定毗连按次
你可以设定优化器所实行的评价数量的下限。可是即便接纳有很低价值的分列评价,我们仍旧具有使优化器能够尽早地保持庞大的查询的主要时机。回忆一下含有15个毗连查询的例子,它将有凌驾1万亿种的毗连组合。假如优化器在评价了80,000个组合后中断,那末它才仅仅评价了0.000006%的大概组合,并且也许还没无为这个伟大的查询找到最好的毗连按次。

在OracleSQL中办理此成绩的最好的办法是手工指定表的毗连按次。为了尽快创立最小的办理计划集,这里所遵守的划定规矩是将表分离起来,一般优先利用限定最严厉的WHERE子句来毗连表。

上面的代码是一个查询实行企图的例子,该例子在emp表的联系关系查询上强迫实行了嵌套的轮回毗连。注重,我已利用了ordered提醒来间接最优化表的评价按次,终极它们体现在WHERE子句上。

select/*+ordereduse_nl(bonus)parallel(e,4)*/

e.ename,

hiredate,

b.comm.

from

empe,

bonusb

where

e.ename=b.ename

这个例子请求优化器按按次毗连在SQL语句的FROM子句中指定的表,在FROM子句中的第一个表指定了驱动表。ordered提醒一般被用来与别的的提醒团结起来来包管接纳准确的按次毗连多个表。它的用处更多的是在改变毗连表数在四个以上的数据堆栈的查询方面。

别的一个例子,上面的查询利用ordered提醒依照指定的按次来毗连表:emp、dept、sal,最初是bonus。我经由过程指定emp到dept利用哈希毗连和sal到bonus利用嵌套轮回毗连,来进一步精华精辟实行企图。

select/*+ordereduse_hash(emp,dept)use_nl(sal,bonus)*/

from

emp,

dept,

sal,

bonus

where...
理论倡议
实践上,更无效率的做法是在产物情况中减小optimizer_max_permutations参数的巨细,而且老是利用不乱的优化企图或存储表面来避免呈现耗时的含有大批毗连的查询。一旦找到最好的毗连按次,您就能够经由过程增添ordered提醒到以后的查询中,并保留它的存储表面,来为这些表手工指定毗连按次,从而使其耐久化。

当你盘算利用优化器来不乱企图,则能够照上面的办法使实行企图耐久化,一时将optimizer_search_limit设置为查询中的表的数量,从而同意优化器思索一切大概的毗连按次。然后,经由过程从头编排WHERE子句中表的名字,并利用ordered提醒,与存储表面一同使变动耐久化,来调剂查询。在查询中包括四个以上的表时,ordered提醒和存储表面将扫除耗时的评价SQL毗连按次剖析的义务,从而进步查询的速率。

一旦检测到最好的毗连按次,我们就能够利用ordered提醒来重载optimizer_search_limit和optimizer_max_permutations参数。ordered提醒请求表依照它们呈现在FROM子句中的按次举行毗连,以是优化器没有到场形貌。

作为一个Oracle专业职员,你应当晓得在SQL语句第一次进进库缓存时大概存在严重的启动提早。可是伶俐的OracleDBA和开辟职员可以改动表的搜刮限定参数大概利用ordered提醒来手工指定表的毗连按次,从而明显地削减优化和实行新查询所需的工夫。


MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。
小妖女 该用户已被删除
沙发
发表于 2015-1-19 19:53:47 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
爱飞 该用户已被删除
板凳
发表于 2015-1-28 10:14:01 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
乐观 该用户已被删除
地板
发表于 2015-2-5 20:38:18 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
透明 该用户已被删除
5#
发表于 2015-2-13 13:18:24 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
小魔女 该用户已被删除
6#
发表于 2015-3-3 21:59:14 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
第二个灵魂 该用户已被删除
7#
发表于 2015-3-11 14:11:58 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-18 22:49:55 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
分手快乐 该用户已被删除
9#
发表于 2015-3-26 20:04:47 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-1 09:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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