MYSQL编程:oracle数据库优化
事实上,在任何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缺少了一些人们想要的功能。 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油 呵呵,这就是偶想说的 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); 比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。 呵呵,这就是偶想说的 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
页:
[1]