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都可以降低你所需要的人力成本。 SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。 语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的! 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层. 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过! XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!) 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 所以你总能得到相应的升级版本,来满足你的需求。
页:
[1]