<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="SQL语句优化技术分析-ORACLE" id="card1">
<p> 游客</p><p>
标题:SQL语句优化技术分析-ORACLE<br/>
正文:<br/>
为了让更多的新手受益，我抽空把SQL语句优化部分进行了整理，希望大家一起进步。<br/><br/>一、操作符优化<br/>1、IN 操作符<br/>用IN写出来的SQL的优点是比较容易写及清晰易懂，这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的，从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别：<br/>ORACLE试图将其转换成多个表的连接，如果转换不成功则先执行IN里面的子查询，再查询外层的表记录，如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功，但对于含有分组统计等方面的SQL就不能转换了。<br/>推荐方案：在业务密集的SQL当中尽量不采用IN操作符，用EXISTS 方案代替。<br/>2、NOT IN操作符<br/>此操作是强列不推荐使用的，因为它不能应用表的索引。<br/>推荐方案：用NOT EXISTS 方案代替<br/>3、IS NULL 或IS NOT NULL操作（判断字段是否为空）<br/>判断字段是否为空一般是不会应用索引的，因为索引是不索引空值的。<br/>推荐方案：用其它相同功能的操作运算代替，如：a is not null 改为 a&amp;gt;0 或a&amp;gt;’’等。不允许字段为空，而用一个缺省值代替空值，如申请中状态字段不允许为空，缺省为申请。<br/>4、&amp;gt; 及 &amp;lt; 操作符（大于或小于操作符）<br/>大于或小于操作符一般情况下是不用调整的，因为它有索引就会采用索引查找，但有的情况下可以对它进行优化，如一个表有100万记录，一个数值型字段A，30万记录的A=0，30万记录的A=1，39万记录的A=2，1万记录的A=3。那么执行A&amp;gt;2与A&amp;gt;=3的效果就有很大的区别了，因为A&amp;gt;2时ORACLE会先找出为2的记录索引再进行比较，而A&amp;gt;=3时ORACLE则直接找到=3的记录索引。<br/>5、LIKE操作符<br/>LIKE操作符可以应用通配符查询，里面的通配符组合可能达到几乎是任意的查询，但是如果用得不好则会产生性能上的问题，如LIKE ‘%5400%’ 这种查询不会引用索引，而LIKE ‘X5400%’则会引用范围索引。<br/>一个实际例子：用YW_YHJBQK表中营业编号后面的户标识号可来查询<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=860&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=860&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=860&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=860&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=860&amp;Page=4">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=860">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=860">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>