﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-摆渡人，外婆桥！-随笔分类-Oracle/MySQL</title><link>http://www.blogjava.net/swingboat/category/6384.html</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----只要路选对了，就不怕有多远！</description><language>zh-cn</language><lastBuildDate>Sat, 26 May 2007 11:52:22 GMT</lastBuildDate><pubDate>Sat, 26 May 2007 11:52:22 GMT</pubDate><ttl>60</ttl><item><title>有关“+”和“_”的search。</title><link>http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Thu, 24 May 2007 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/119848.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/119848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/119848.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天下午QA给我报了一个bug，说输入&#8220;f+f&#8221;或者&#8220;f_f&#8221;能够搜索出&#8220;f f&#8221;的结果。看着这bug的描述，心里还想着怎么会呢，模糊查询也不会出现这样的结果啊！赶紧自己输入&#8220;f+f&#8221;和&#8220;f_f&#8221;验证下，结果两次都输出了&#8220;f f&#8221;。由于查询的条件是通过URL后的参数输入的，当我输入&#8220;f+f&#8221;时，发现参数传入到服务端后变成了&#8220;f f&#8221;了，如果是这样，那search的结果是正确的。但为什么输入的参数&#8220;f+f&#8221;怎么会变成了&#8220;f f&#8221;呢？而且在输入参数都通过escape进行编码了。于是上网google了一下，发现escape函数是不会对&#8220;+&#8221;进行编码的，但请求时，web服务器会过滤掉&#8220;+&#8221;这个字符。所以我们必须手工对&#8220;+&#8221;进行编码，把所有的&#8220;+&#8221;都改变为&#8220;%2b&#8221;。修改代码测试，再次输入&#8220;f+f&#8221;，结果不能搜索出&#8220;f f&#8221;的结果了。<br>而对输入&#8220;f_f&#8221;搜索出&#8220;f f&#8221;的结果，主要原因是这个是模糊查询的一种。&#8220;f_f&#8221;表示搜索出含有两个&#8220;f&#8221;字符而且中间有一个字符分隔的，&#8220;f&nbsp; f&#8221;正好满足这个条件，于是被搜索出了。<br>
<img src ="http://www.blogjava.net/swingboat/aggbug/119848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2007-05-24 23:28 <a href="http://www.blogjava.net/swingboat/archive/2007/05/24/119848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用sql语句实现的几个功能 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25668.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25668.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25668.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25668.html</trackback:ping><description><![CDATA[<DIV class=postText>
<P>1、SQL 语句中，union的使用: <BR>&nbsp;&nbsp; Table a:&nbsp;&nbsp;&nbsp; field1,field2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table b:&nbsp;&nbsp; field1,field2 <BR>&nbsp;&nbsp; data:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2,&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2,&nbsp;&nbsp;&nbsp;&nbsp; 3 <BR>&nbsp;&nbsp; sql:&nbsp; select filed1 from a union select field1 from b <BR>&nbsp;&nbsp; data: field1 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 <BR>&nbsp;&nbsp; sql:&nbsp; select filed1,field2 from a union select field1,field2 from b <BR>&nbsp;&nbsp; data: field1,field2 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp; <BR>2、table1｛id：int，charge：int，fk：int｝ <BR>&nbsp;&nbsp; table2｛id：int，charge：int｝ <BR>&nbsp;&nbsp; 修改table2，使charge等于table1中相应值的和 <BR>&nbsp;&nbsp; sql：update a set a.charge=b.totalcharge <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from (select id,sum(charge) totalcharge from table1 group by id)&nbsp; b,table2 a <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where a.id=b.id <BR>3、出发点&nbsp;&nbsp; 目的地&nbsp;&nbsp;&nbsp;&nbsp; 路程 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用sql语句计算出所有从A出发所能到达的目的地，包括间接的。 <BR>&nbsp;&nbsp; sql：select distinic 目的地 from 表 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where 出发点 in ( <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select distinic 目的地 from&nbsp; 表 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where 出发点='A' union select 'A') <BR>&nbsp;&nbsp; 说明：上面的方法只使用一级嵌套。可以满足此题的需求。 <BR>4、表t1 <BR>&nbsp;&nbsp;&nbsp;&nbsp; year&nbsp;&nbsp; quarter&nbsp;&nbsp; num <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2001&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.4 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2001&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.12 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2001&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.13 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2001&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.14 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2002&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.21 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2002&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.22 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2002&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.23 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2002&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.24 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 用sql语句获取下面的数据 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2001&nbsp; 3.4&nbsp; 5.12&nbsp; 6.13&nbsp; 8.14 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2002&nbsp; 5.21&nbsp; 4.22&nbsp; 6.23&nbsp; 4.24 </P>
<P>&nbsp;&nbsp; sql：select [year],avg(case[quarter] when '1' then num) as 'quarter1', <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; avg(case[quarter] when '2' then num) as 'quarter2', <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; avg(case[quarter] when '3' then num) as 'quarter3', <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; avg(case[quarter] when '4' then num) as 'quarter4' <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from t1 group by year <BR></P></DIV><img src ="http://www.blogjava.net/swingboat/aggbug/25668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:23 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql 的中乱码问题 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25669.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25669.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25669.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25669.html</trackback:ping><description><![CDATA[环境：winxp sp2，jboss-3.2.3，mysql 4.1 <BR>现象：启动jboss，浏览网页，能够从数据库中读出数据，但是所有中文数据都是“？” <BR>原因：可能有两种 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、mysql的确省字符集设置的不是gb <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、mysql-connector（mysql官方提供的jdbc驱动程序）有问题 <BR><BR>解决： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一种情况：修改my.ini文件。my.ini可能存在系统目录下（c:\windows）和mysql所安装的目录下（C:\Program Files\mysql\MySQL Server 4.1）。打开my.ini文件，找到[mysqld]块。把default-character设置为gbk，如果没有找到则添加即default-character-set=gbk。 重启mysql，问题解决。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二种情况：到mysql的官方网站下载最新的jdbc驱动程序。www.mysql.org <img src ="http://www.blogjava.net/swingboat/aggbug/25669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:23 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的几个使用问题 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25667.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25667.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25667.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25667.html</trackback:ping><description><![CDATA[1、在Windows的服务中“OracleServiceWINSOM”服务的状态为“启动”，所能执行的任务也都是灰色的。Oracle没有正常的启动。 <BR>&nbsp;&nbsp; 解决：run：cmd <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svrmgrl <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connect internal/oracle <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shutdown immediate <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startup <BR>2、导入，导出数据 <BR>&nbsp;&nbsp; a、删除一个用户： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; drop user smartweb CASCADE <BR>&nbsp;&nbsp; b、创建一个用户： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create user smartweb identified by smartweb <BR>&nbsp;&nbsp; c、给用户赋予权限： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grant connect to smartweb <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grant resource to smartweb <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grant create session to smartweb <BR>&nbsp;&nbsp; d、连接： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn smartweb/smartweb <BR>&nbsp;&nbsp; e、导入： <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imp <BR>3、查看oracle的版本 <BR>&nbsp;&nbsp; select * from v$version <BR>4、修改oracle中的Oracle Servlet Engine（OSE）所占的8080端口（TNSLSNR.exe）。 <BR>&nbsp;&nbsp; 安装Oracle 9i后8080端口被OSE占用，即tnslsnr.exe进程所占用。清除此端口方法： <BR>&nbsp;&nbsp; cd $ORACLE_HOME/jis/install <BR>&nbsp;&nbsp; sess_sh -u sys/change_on_install -role SYSDBA -s jdbc:oracle:oci8:@yhp <BR>&nbsp;&nbsp; <A href="mailto:$@serverendp.ssh"><FONT color=#000080>$@serverendp.ssh</FONT></A> <BR>&nbsp;&nbsp; $exit <BR>5、imp时，出现的错误：不支持要求的字符集转换（从类型850到852） <BR>&nbsp;&nbsp; 使用函数NLS_CHARSET_NAME即可获得该字符集： <BR>&nbsp;&nbsp; SQL&gt; select nls_charset_name(1) from dual; <BR>NLS_CHARSET_NAME(1) <BR>------------------- <BR>US7ASCII <BR>可以知道该dmp文件的字符集为US7ASCII，如果需要把该dmp文件的字符集换成ZHS16GBK，则需要用NLS_CHARSET_ID获取该字符集的编号： <BR>SQL&gt; select nls_charset_id('zhs16gbk') from dual; <BR>NLS_CHARSET_ID('ZHS16GBK') <BR>-------------------------- <BR>852 <BR>把852换成16进制数，为354，把2、3字节的00 01换成03 54，即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化，这样，再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。（注意，十进制数与十六进制之间的转换，想明白其中的道理）<img src ="http://www.blogjava.net/swingboat/aggbug/25667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:22 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE SQL语句优化技术分析 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25659.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25659.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25659.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25659.html</trackback:ping><description><![CDATA[<STRONG>IN 操作符</STRONG>
<P>&nbsp;&nbsp;&nbsp;&nbsp;用IN写出来的SQL的优点是比较容易写及清晰易懂，这比较适合现代软件开发的风格。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;但是用IN的SQL性能总是比较低的，从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别：</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;ORACLE试图将其转换成多个表的连接，如果转换不成功则先执行IN里面的子查询，再查询外层的表记录，如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功，但对于含有分组统计等方面的SQL就不能转换了。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案：在业务密集的SQL当中尽量不采用IN操作符。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<B>NOT IN</B><B>操作符</B></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;此操作是强列推荐不使用的，因为它不能应用表的索引。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案：用NOT EXISTS 或（外连接+判断为空）方案代替</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<B>&lt;&gt; </B><B>操作符（不等于）</B></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;不等于操作符是永远不会用到索引的，因此对它的处理只会产生全表扫描。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案：用其它相同功能的操作运算代替，如</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;a&lt;&gt;0 改为 a&gt;0 or a&lt;0</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;a&lt;&gt;’’ 改为 a&gt;’’</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<B>IS NULL </B><B>或IS NOT NULL</B><B>操作（判断字段是否为空）</B></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;判断字段是否为空一般是不会应用索引的，因为B树索引是不索引空值的。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;推荐方案：</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;用其它相同功能的操作运算代替，如</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;a is not null 改为 a&gt;0 或a&gt;’’等。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;不允许字段为空，而用一个缺省值代替空值，如业扩申请中状态字段不允许为空，缺省为申请。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;建立位图索引（有分区的表不能建，位图索引比较难控制，如字段值太多索引会使性能下降，多人更新操作会增加数据块锁的现象）</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<B>&gt; </B><B>及 &lt; </B><B>操作符（大于或小于操作符）</B></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;大于或小于操作符一般情况下是不用调整的，因为它有索引就会采用索引查找，但有的情况下可以对它进行优化，如一个表有100万记录，一个数值型字段A，30万记录的A=0，30万记录的A=1，39万记录的A=2，1万记录的A=3。那么执行A&gt;2与A&gt;=3的效果就有很大的区别了，因为A&gt;2时ORACLE会先找出为2的记录索引再进行比较，而A&gt;=3时ORACLE则直接找到=3的记录索引。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;<B>LIKE</B><B>操作符</B></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;LIKE操作符可以应用通配符查询，里面的通配符组合可能达到几乎是任意的查询，但是如果用得不好则会产生性能上的问题，如LIKE ‘%5400%’ 这种查询不会引用索引，而LIKE ‘X5400%’则会引用范围索引。一个实际例子：用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描，如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询，性能肯定大大提高。</P><img src ="http://www.blogjava.net/swingboat/aggbug/25659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:19 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Oracle中，快速获取一个部门以及它下面所有的子部门的方法。 </title><link>http://www.blogjava.net/swingboat/archive/2005/12/28/25644.html</link><dc:creator>swingboat</dc:creator><author>swingboat</author><pubDate>Wed, 28 Dec 2005 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/swingboat/archive/2005/12/28/25644.html</guid><wfw:comment>http://www.blogjava.net/swingboat/comments/25644.html</wfw:comment><comments>http://www.blogjava.net/swingboat/archive/2005/12/28/25644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/swingboat/comments/commentRss/25644.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/swingboat/services/trackbacks/25644.html</trackback:ping><description><![CDATA[<P>有一个部门表（T_Department）：<BR>T_Department：<BR>&nbsp;&nbsp;&nbsp;&nbsp; ID ：varchar2（25)<BR>&nbsp;&nbsp;&nbsp;&nbsp; Name：varchar2（100)<BR>&nbsp;&nbsp;&nbsp;&nbsp; SuperiorID：varchar2（25）<BR>&nbsp;&nbsp;&nbsp;&nbsp; SuperiorName：varchar2（100)<BR>&nbsp;&nbsp;&nbsp;&nbsp; Remark：varchar2（1000)</P>
<P><BR>根据一个部门的ID，获取该部门下所有的子部门,例如部门的ID为“D”：<BR>select * from T_Department<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start with&nbsp; ID='D'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connect by&nbsp; prior&nbsp; ID=SuperiorID</P><img src ="http://www.blogjava.net/swingboat/aggbug/25644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/swingboat/" target="_blank">swingboat</a> 2005-12-28 09:01 <a href="http://www.blogjava.net/swingboat/archive/2005/12/28/25644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>