活着的死人 发表于 2015-1-16 22:39:54

MYSQL网站制作之ORACLE SQL功能优化系列 (十)

MySQL在业界的流行所带来的另一个好处是,人们总可以很轻松地发现本行业的MySQL学习教程。厂商都希望他们的开发工具和应用程序框架可以与MySQL数据库兼容。oracle|功能|优化
31.强迫索引生效





假如两个或以上索引具有不异的品级,你能够强迫命令ORACLE优化器利用个中的一个(经由过程它,检索出的纪录数目少).



举例:



SELECTENAME

FROMEMP

WHEREEMPNO=7935

ANDDEPTNO+0=10/*DEPTNO上的索引将生效*/

ANDEMP_TYPE||‘’=‘A’/*EMP_TYPE上的索引将生效*/



这是一种相称间接的进步查询效力的举措.可是你必需审慎思索这类战略,一样平常来讲,只要在你但愿独自优化几个SQL时才干接纳它.



这里有一个例子关于什么时候接纳这类战略,



假定在EMP表的EMP_TYPE列上有一个非独一性的索引而EMP_CLASS上没有索引.



SELECTENAME

FROMEMP

WHEREEMP_TYPE=‘A’

ANDEMP_CLASS=‘X’;



优化器会注重到EMP_TYPE上的索引并利用它.这是今朝独一的选择.假如,一段工夫今后,另外一个非独一性创建在EMP_CLASS上,优化器必需对两个索引举行选择,在一般情形下,优化器将利用两个索引并在他们的了局汇合上实行排序及兼并.但是,假如个中一个索引(EMP_TYPE)靠近于独一性而另外一个索引(EMP_CLASS)上有几千个反复的值.排序及兼并就会成为一种不用要的包袱.在这类情形下,你但愿使优化器屏障失落EMP_CLASS索引.

用上面的计划就能够办理成绩.

SELECTENAME

FROMEMP

WHEREEMP_TYPE=‘A’

ANDEMP_CLASS||’’=‘X’;



32.制止在索引列上利用盘算.

WHERE子句中,假如索引列是函数的一部分.优化器将不利用索引而利用全表扫描.



举例:



低效:

SELECT…

FROMDEPT

WHERESAL*12>25000;



高效:

SELECT…

FROMDEPT

WHERESAL>25000/12;



译者按:

这是一个十分有用的划定规矩,请务必切记



33.主动选择索引

假如表中有两个以上(包含两个)索引,个中有一个独一性索引,而其他长短独一性.

在这类情形下,ORACLE将利用独一性索引而完整疏忽非独一性索引.



举例:

SELECTENAME

FROMEMP

WHEREEMPNO=2326

ANDDEPTNO=20;



这里,只要EMPNO上的索引是独一性的,以是EMPNO索引将用来检索纪录.

TABLEACCESSBYROWIDONEMP

INDEXUNIQUESCANONEMP_NO_IDX



34.制止在索引列上利用NOT

一般, 我们要制止在索引列上利用NOT,NOT会发生在和在索引列上利用函数不异的

影响.当ORACLE”碰到”NOT,他就会中断利用索引转而实行全表扫描.

举例:



低效:(这里,不利用索引)



SELECT…

FROMDEPT

WHEREDEPT_CODENOT=0;



高效:(这里,利用了索引)



SELECT…

FROMDEPT

WHEREDEPT_CODE>0;



必要注重的是,在某些时分,ORACLE优化器会主动将NOT转化成绝对应的干系操纵符.

NOT>to<=

NOT>=to<

NOT<to>=

NOT<=to>





译者按:

在这个例子中,作者犯了一些毛病.例子中的低效力SQL是不克不及被实行的.

我做了一些测试:



SQL>select*fromempwhereNOTempno>1;

norowsselected

ExecutionPlan

----------------------------------------------------------

0SELECTSTATEMENTOptimizer=CHOOSE

10TABLEACCESS(BYINDEXROWID)OFEMP

21INDEX(RANGESCAN)OFEMPNO(UNIQUE)



SQL>select*fromempwhereempno<=1;

norowsselected

ExecutionPlan

----------------------------------------------------------

0SELECTSTATEMENTOptimizer=CHOOSE

10TABLEACCESS(BYINDEXROWID)OFEMP

21INDEX(RANGESCAN)OFEMPNO(UNIQUE)



二者的效力完整一样,大概这切合作者关于”在某些时分,ORACLE优化器会主动将NOT转化成绝对应的干系操纵符”的概念.



35.用>=替换>



假如DEPTNO上有一个索引,



高效:



SELECT*

FROMEMP

WHEREDEPTNO>=4



低效:



SELECT*

FROMEMP

WHEREDEPTNO>3



二者的区分在于,前者DBMS将间接跳到第一个DEPT即是4的纪录尔后者将起首定位到DEPTNO=3的纪录而且向前扫描到第一个DEPT年夜于3的纪录.
只需每年花费2000到5000美元。无论你是自掏腰包来创建一个新兴公司,还是得到了风险投资商的赞助,使用MySQL都可以降低你所需要的人力成本。

变相怪杰 发表于 2015-1-19 21:04:06

SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。

若相依 发表于 2015-1-25 18:12:21

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

简单生活 发表于 2015-2-9 00:51:07

这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。

透明 发表于 2015-2-26 16:02:22

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

柔情似水 发表于 2015-3-8 15:55:31

我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!

小魔女 发表于 2015-3-16 03:58:10

XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)

金色的骷髅 发表于 2015-3-22 20:08:10

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

再见西城 发表于 2015-3-22 20:08:10

所以你总能得到相应的升级版本,来满足你的需求。
页: [1]
查看完整版本: MYSQL网站制作之ORACLE SQL功能优化系列 (十)