MYSQL网页设计ORACLE SQL功能优化系列 (九)
DBaaS系统其实具有更大的市场机遇:像其他云服务一样,DBaaS意味着更短的销售周期,更少的启动费用,持续不断的收入,也意味着比之前更多的客户。oracle|功能|优化27.基本表的选择
基本表(DrivingTable)是指被开始会见的表(一般以全表扫描的体例被会见).依据优化器的分歧,SQL语句中基本表的选择是纷歧样的.
假如你利用的是CBO(COSTBASEDOPTIMIZER),优化器会反省SQL语句中的每一个表的物理巨细,索引的形态,然后选用消费最低的实行路径.
假如你用RBO(RULEBASEDOPTIMIZER),而且一切的毗连前提都有索引对应,在这类情形下,基本表就是FROM子句中列在最初的谁人表.
举例:
SELECTA.NAME,B.MANAGER
FROM WORKERA,
LODGINGB
WHERE A.LODGING=B.LODING;
因为LODGING表的LODING列上有一个索引,并且WORKER表中没有比拟较的索引,WORKER表将被作为查询中的基本表.
28.多个同等的索引
当SQL语句的实行路径可使用散布在多个表上的多个索引时,ORACLE会同时利用多个索引并在运转时对它们的纪录举行兼并,检索出仅对全体索引无效的纪录.
在ORACLE选择实行路径时,独一性索引的品级高于非独一性索引.但是这个划定规矩只要
当WHERE子句中索引列和常量对照才无效.假如索引列和其他表的索引类比拟较.这类子句在优化器中的品级长短常低的.
假如分歧表中两个想一律级的索引将被援用,FROM子句中表的按次将决意哪一个会被领先利用.FROM子句中最初的表的索引将有最高的优先级.
假如不异表中两个想一律级的索引将被援用,WHERE子句中开始被援用的索引将有最高的优先级.
举例:
DEPTNO上有一个非独一性索引,EMP_CAT也有一个非独一性索引.
SELECTENAME,
FROMEMP
WHEREDEPT_NO=20
ANDEMP_CAT=‘A’;
这里,DEPTNO索引将被开始检索,然后同EMP_CAT索引检索出的纪录举行兼并.实行路径以下:
TABLEACCESSBYROWIDONEMP
AND-EQUAL
INDEXRANGESCANONDEPT_IDX
INDEXRANGESCANONCAT_IDX
29.等式对照和局限对照
当WHERE子句中有索引列,ORACLE不克不及兼并它们,ORACLE将用局限对照.
举例:
DEPTNO上有一个非独一性索引,EMP_CAT也有一个非独一性索引.
SELECTENAME
FROMEMP
WHEREDEPTNO>20
ANDEMP_CAT=‘A’;
这里只要EMP_CAT索引被用到,然后一切的纪录将逐条与DEPTNO前提举行对照.实行路径以下:
TABLEACCESSBYROWIDONEMP
INDEXRANGESCANONCAT_IDX
30.不明白的索引品级
当ORACLE没法判别索引的品级上下不同,优化器将只利用一个索引,它就是在WHERE子句中被列在最后面的.
举例:
DEPTNO上有一个非独一性索引,EMP_CAT也有一个非独一性索引.
SELECTENAME
FROMEMP
WHEREDEPTNO>20
ANDEMP_CAT>‘A’;
这里,ORACLE只用到了DEPT_NO索引.实行路径以下:
TABLEACCESSBYROWIDONEMP
INDEXRANGESCANONDEPT_IDX
译者按:
我们来试一下以下这类情形:
SQL>selectindex_name,uniquenessfromuser_indexeswheretable_name=EMP;
INDEX_NAMEUNIQUENES
---------------------------------------
EMPNOUNIQUE
EMPTYPENONUNIQUE
SQL>select*fromempwhereempno>=2andemp_type=A;
norowsselected
ExecutionPlan
----------------------------------------------------------
0SELECTSTATEMENTOptimizer=CHOOSE
10TABLEACCESS(BYINDEXROWID)OFEMP
21INDEX(RANGESCAN)OFEMPTYPE(NON-UNIQUE)
固然EMPNO是独一性索引,可是因为它所做的是局限对照,品级要比非独一性索引的等式对照低!
MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。 多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。 如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。 而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。 不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关 作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题! 原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
页:
[1]