|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
事实上,在任何DBaaS中,解决方案提供商对如何管理物理资源都没有控制权,因此MySQL学习教程可能会发现由于DBaaS的局限性使得他们提供给客户的远远小于客户所期望的。oracle|数据|数据库|优化
优化就是选择最无效的办法来实行SQL语句。Oracle优化器选择它以为最无效的
办法来实行SQL语句。
1).ISNULL和ISNOTNULL
假如某列存在NULL值,即便对该列创建索引也不会进步功能。
2).为分歧的事情编写分歧的SQL语句块
为完成分歧的事情编写一年夜块SQL程序不是好办法。它常常招致每一个义务的了局不优
化。若要SQL完成分歧的事情,一样平常应编写分歧的语句块比编写一个要好。
3).IN和EXISTS
Selectnamefromemployeewherenamenotin(selectnamefromstudent);
Selectnamefromemployeewherenotexists(selectnamefromstudent);
第一句SQL语句的实行效力不如第二句。
经由过程利用EXISTS,Oracle会起首反省主查询,然后运转子查询直到它找到第一个婚配
项,这就节俭了工夫。Oracle在实行IN子查询时,起首实行子查询,并将取得的了局
列表寄存在一个加了索引的一时表中。在实行子查询之前,体系先将主查询挂起,待
子查询实行终了,寄存在一时表中今后再实行主查询。这也就是利用EXISTS比利用IN
一般查询速率快的缘故原由。
4).NOT运算符
Select*fromemployeewheresalary1000;
Select*fromemployeewheresalary<1000orsalary>1000;
第一句SQL语句的实行效力不如第二句,由于第二句SQL语句可使用索引。
5).OrderBy语句
OrderBy语句的实行效力很低,由于它要排序。应制止在OrderBy字句中利用表达式。
6).列的毗连
select*fromemployeewherename||department=’ZYZBIOINFO’;
select*fromemployeewherename=’ZYZ’anddepartment=’BIOINFO’;
这两个查询,第二句比第一句会快,由于关于有毗连运算符’||’的查询,Oracle优化器是不
会利用索引的。
7).通配符‘%’当通配符呈现在搜刮词首时,Oracle优化器不利用索引
Select*fromemployeewherenamelike‘%Z%’;
Select*fromemployeewherenamelike‘Z%’;
第二句的实行效力会比第一句快,但查询了局集大概会分歧。
8).应只管制止夹杂范例的表达式
假定字段studentno为VARCHAR2范例
有语句select*fromstudentwherestudentno>123;
则Oracle会有一个隐含的范例转换。隐含的范例转换大概会使Oracle优化器疏忽索引。
这时候应利用显式的范例转换select*fromstudentwherestudentno=to_char(123)。
9).DISTINCT
DISTINCT老是创建一个排序,以是查询速率也慢。对于IT经理来说,令他们喜欢的MySQL的简单性还有另一方面。MySQL可以运行的更快速。某些人或许会说MySQL缺少了一些人们想要的功能。 |
|