仓酷云

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

[学习教程] MYSQL网站制作之ORACLE SQL功能优化系列 (十四) 结束篇...

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。oracle|功能|优化
46.毗连多个扫描

假如你对一个列和一组无限的值举行对照,优化器大概实行屡次扫描并对了局举行兼并毗连.

举例:

SELECT*

FROMLODGING

WHEREMANAGERIN(‘BILLGATES’,’KENMULLER’);



优化器大概将它转换成以下情势

SELECT*

FROMLODGING

WHEREMANAGER=‘BILLGATES’

ORMANAGER=’KENMULLER’;



中选择实行路径时,优化器大概对每一个前提接纳LODGING$MANAGER上的索引局限扫描.前往的ROWID用来会见LODGING表的纪录(经由过程TABLEACCESSBYROWID的体例).最初两组纪录以毗连(CONCATENATION)的情势被组分解一个单一的汇合.



ExplainPlan:



SELECTSTATEMENTOptimizer=CHOOSE

CONCATENATION

TABLEACCESS(BYINDEXROWID)OFLODGING

INDEX(RANGESCAN)OFLODGING$MANAGER(NON-UNIQUE)

TABLEACCESS(BYINDEXROWID)OFLODGING

INDEX(RANGESCAN)OFLODGING$MANAGER(NON-UNIQUE)

译者按:

本节和第37节仿佛有冲突的地方.





47.CBO下利用更具选择性的索引

基于本钱的优化器(CBO,Cost-BasedOptimizer)对索引的选择性举行判别来决意索引的利用是不是能进步效力.

假如索引有很高的选择性,那就是说关于每一个不反复的索引键值,只对应数目很少的纪录.

好比,表中共有100笔记录而个中有80个不反复的索引键值.这个索引的选择性就是80/100=0.8.选择性越高,经由过程索引键值检索出的纪录就越少.

假如索引的选择性很低,检索数据就必要大批的索引局限查询操纵和ROWID会见表的

操纵.大概会比全表扫描的效力更低.



译者按:

以下履历请参阅:

a.假如检索数据量凌驾30%的表中纪录数.利用索引将没有明显的效力进步.

b.在特定情形下,利用索引大概会比全表扫描慢,但这是统一个数目级上的

区分.而一般情形下,利用索引比全表扫描要块几倍以致几千倍!





48.制止利用泯灭资本的操纵

带有DISTINCT,UNION,MINUS,INTERSECT,ORDERBY的SQL语句会启动SQL引擎

实行泯灭资本的排序(SORT)功效.DISTINCT必要一次排序操纵,而其他的最少必要实行两次排序.

比方,一个UNION查询,个中每一个查询都带有GROUPBY子句,GROUPBY会触发嵌进排序(NESTEDSORT);如许,每一个查询必要实行一次排序,然后在实行UNION时,又一个独一排序(SORTUNIQUE)操纵被实行并且它只能在后面的嵌进排序停止后才干入手下手实行.嵌进的排序的深度会年夜年夜影响查询的效力.

一般,带有UNION,MINUS,INTERSECT的SQL语句都能够用其他体例重写.

译者按:

假如你的数据库的SORT_AREA_SIZE分配得好,利用UNION,MINUS,INTERSECT也是能够思索的,究竟它们的可读性很强





49.优化GROUPBY

进步GROUPBY语句的效力,能够经由过程将不必要的纪录在GROUPBY之前过滤失落.上面两个查询前往不异了局但第二个分明就快了很多.



低效:

SELECTJOB,AVG(SAL)

FROMEMP

GROUPJOB

HAVINGJOB=‘PRESIDENT’

ORJOB=‘MANAGER’

高效:

SELECTJOB,AVG(SAL)

FROMEMP

WHEREJOB=‘PRESIDENT’

ORJOB=‘MANAGER’

GROUPJOB



译者按:

本节和14节不异.可略过.



50.利用日期

当利用日期是,必要注重假如有凌驾5位小数加到日期上,这个日期会进到下一天!



比方:

1.

SELECTTO_DATE(‘01-JAN-93’+.99999)

FROMDUAL;



Returns:

’01-JAN-9323:59:59’

2.

SELECTTO_DATE(‘01-JAN-93’+.999999)

FROMDUAL;



Returns:

’02-JAN-9300:00:00’



译者按:

固然本节和SQL功能优化没有干系,可是作者的功力可见一斑



51.利用显式的游标(CURSORs)

利用隐式的游标,将会实行两次操纵.第一次检索纪录,第二次反省TOOMANYROWS这个exception.而显式游标不实行第二次操纵.



52.优化EXPORT和IMPORT

利用较年夜的BUFFER(好比10MB,10,240,000)能够进步EXPORT和IMPORT的速率.

ORACLE将尽量地猎取你所指定的内存巨细,即便在内存不满意,也不会报错.这个值最少要和表中最年夜的列相称,不然列值会被截断.

译者按:

能够一定的是,增添BUFFER会年夜年夜进步EXPORT,IMPORT的效力.(已经碰着过一个CASE,增添BUFFER后,IMPORT/EXPORT快了10倍!)

作者大概犯了一个毛病:“这个值最少要和表中最年夜的列相称,不然列值会被截断.“

个中最年夜的列大概是指最年夜的纪录巨细.

关于EXPORT/IMPORT的优化,CSDN论坛中有一些总结性的贴子,好比关于BUFFER参数,COMMIT参数等等,概况请查.



53.分别表和索引

老是将你的表和索引创建在分歧的表空间内(TABLESPACES).决不要将不属于ORACLE外部体系的工具寄存到SYSTEM表空间里.同时,确保数据表空间和索引表空间置于分歧的硬盘上.



译者按:

“同时,确保数据表空间和索引表空间置与分歧的硬盘上.”大概改成以下更加正确“同时,确保数据表空间和索引表空间置与分歧的硬盘把持卡把持的硬盘上.”





(全文完)

Black_Snail

ligang1000@hotmail.com

4/Sep/2003


关于这个理由我把它放在最后一位。在很多业界专家中有一个相当一致的观点:MySQL不能很好的扩展。关于这点可能有很大的分歧,争论的焦点主要集中于水平可扩展性和垂直可扩展性上。MySQL则更倾向于垂直可扩展性。
分手快乐 该用户已被删除
沙发
发表于 2015-1-19 21:04:58 | 只看该作者
无法深入到数据库系统层面去了解和探究
板凳
发表于 2015-1-25 19:34:58 | 只看该作者
相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐
乐观 该用户已被删除
地板
发表于 2015-2-3 17:19:39 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
小魔女 该用户已被删除
5#
发表于 2015-2-9 04:13:33 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
活着的死人 该用户已被删除
6#
发表于 2015-2-26 21:16:46 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-8 17:58:39 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
不帅 该用户已被删除
8#
发表于 2015-3-16 09:43:35 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-22 22:09:47 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 03:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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