﻿<?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</title><link>http://www.blogjava.net/hao446tian/category/48040.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 27 Jul 2012 13:49:17 GMT</lastBuildDate><pubDate>Fri, 27 Jul 2012 13:49:17 GMT</pubDate><ttl>60</ttl><item><title>物化视图脚本</title><link>http://www.blogjava.net/hao446tian/archive/2012/06/15/380861.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Fri, 15 Jun 2012 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2012/06/15/380861.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/380861.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2012/06/15/380861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/380861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/380861.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_65_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_65_Open_Text.style.display='none'; Codehighlighter1_0_65_Closed_Image.style.display='inline'; Codehighlighter1_0_65_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_65_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_65_Closed_Text.style.display='none'; Codehighlighter1_0_65_Open_Image.style.display='inline'; Codehighlighter1_0_65_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_65_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_65_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">==============================================================</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_67_120_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_120_Open_Text.style.display='none'; Codehighlighter1_67_120_Closed_Image.style.display='inline'; Codehighlighter1_67_120_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_67_120_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_120_Closed_Text.style.display='none'; Codehighlighter1_67_120_Open_Image.style.display='inline'; Codehighlighter1_67_120_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_67_120_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_67_120_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">&nbsp;需要用user1账号执行下面的授权&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_122_187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_122_187_Open_Text.style.display='none'; Codehighlighter1_122_187_Closed_Image.style.display='inline'; Codehighlighter1_122_187_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_122_187_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_122_187_Closed_Text.style.display='none'; Codehighlighter1_122_187_Open_Image.style.display='inline'; Codehighlighter1_122_187_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_122_187_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_122_187_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">==============================================================</span><span style="color: #008080">*/</span></span><span style="color: #000000">&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">any</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">commit</span><span style="color: #000000">&nbsp;refresh&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">;&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_298_363_Open_Image" onclick="this.style.display='none'; Codehighlighter1_298_363_Open_Text.style.display='none'; Codehighlighter1_298_363_Closed_Image.style.display='inline'; Codehighlighter1_298_363_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_298_363_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_298_363_Closed_Text.style.display='none'; Codehighlighter1_298_363_Open_Image.style.display='inline'; Codehighlighter1_298_363_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_298_363_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_298_363_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">==============================================================</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_365_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_365_418_Open_Text.style.display='none'; Codehighlighter1_365_418_Closed_Image.style.display='inline'; Codehighlighter1_365_418_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_365_418_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_365_418_Closed_Text.style.display='none'; Codehighlighter1_365_418_Open_Image.style.display='inline'; Codehighlighter1_365_418_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_365_418_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_365_418_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">&nbsp;需要用sys账号执行下面的授权&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_420_485_Open_Image" onclick="this.style.display='none'; Codehighlighter1_420_485_Open_Text.style.display='none'; Codehighlighter1_420_485_Closed_Image.style.display='inline'; Codehighlighter1_420_485_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_420_485_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_420_485_Closed_Text.style.display='none'; Codehighlighter1_420_485_Open_Image.style.display='inline'; Codehighlighter1_420_485_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_420_485_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_420_485_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">==============================================================</span><span style="color: #008080">*/</span></span><span style="color: #000000">&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;exempt&nbsp;access&nbsp;policy&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;exempt&nbsp;access&nbsp;policy&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;exempt&nbsp;access&nbsp;policy&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;AAA;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;AAA&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">primary</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;AAA;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;AAA&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />refresh&nbsp;fast&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">commit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;bindid,&nbsp;merchantid,&nbsp;userid,&nbsp;bindtime,&nbsp;bindtype,&nbsp;username,&nbsp;gsmsn<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;AAA&nbsp;t;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;DDD;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;DDD&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">primary</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;BBB;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;&nbsp;BBB<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />refresh&nbsp;fast&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">commit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;MERCHANTID,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPANYNAME,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORGANIZATION<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;DDD&nbsp;t;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;BBB;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;CCC;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;CCC;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;BBB&nbsp;</span><span style="color: #0000ff">WITH</span><span style="color: #000000">&nbsp;rowid&nbsp;,SEQUENCE&nbsp;(userid,timinalid,ACCOUNTNO,IMSI,REGDATE,NICKNAME,SEX,INVALID,ISACTIVE,USERTYPE,STATUS,BIZTYPE,ACTIVEDATE,SIGNATURE,PHOTOID,CITYID,CARID,USERPHOTO,USERCARPHOTO,MOBILENO,EMAIL,LOGINDAYS,LASTLOGINDATE,USERSTATUS,LATELYCITY,LATELYCITYDATE)&nbsp;INCLUDING&nbsp;NEW&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;CCC&nbsp;</span><span style="color: #0000ff">WITH</span><span style="color: #000000">&nbsp;rowid&nbsp;,SEQUENCE&nbsp;(IDENTIFYCARD,CARNUMBER,FDJNUMBER,FOURSSHOP,DELIVERDATE,BIRTHDATE,ADDRESS,MILEAGE,MILEAGETIME)&nbsp;INCLUDING&nbsp;NEW&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">log</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;CCC&nbsp;</span><span style="color: #0000ff">WITH</span><span style="color: #000000">&nbsp;rowid&nbsp;,SEQUENCE&nbsp;(DEVICEID,IMSI,ISSUEMONTH,ICCID,SIMPHONE,GSMSN,DEVICESN,CURVER,DEVICETYPE,IS3GNET,IMSITYPE,TERMINALINFO,RATEID,CARDSTATUS)&nbsp;INCLUDING&nbsp;NEW&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;DDD;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;materialized&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;DDD<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />refresh&nbsp;fast&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">commit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;a.rowid&nbsp;arowid,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.USERID,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.ACCOUNTNO,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.rowid&nbsp;browid,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.USERNAME,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.rowid&nbsp;crowid,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.DEVICEID&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;BBB&nbsp;a&nbsp;,CCC&nbsp;b,CCC&nbsp;c&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;a.userid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;b.userid(</span><span style="color: #808080">+</span><span style="color: #000000">)&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;a.timinalid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;c.terminalid(</span><span style="color: #808080">+</span><span style="color: #000000">);<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">index</span><span style="color: #000000">&nbsp;INDEX_DDD </span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;DDD(merchantid)<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;tablespace&nbsp;SSS<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;pctfree&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;initrans&nbsp;</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;maxtrans&nbsp;</span><span style="font-weight: bold; color: #800000">255</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;storage<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;(<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;initial&nbsp;5M<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;minextents&nbsp;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;maxextents&nbsp;unlimited<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;);&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">index</span><span style="color: #000000">&nbsp;INDEX_AAA&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;AAA(userid)<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;tablespace&nbsp;SSS<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;pctfree&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;initrans&nbsp;</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;maxtrans&nbsp;</span><span style="font-weight: bold; color: #800000">255</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;storage<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;(<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;initial&nbsp;5M<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;minextents&nbsp;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;maxextents&nbsp;unlimited<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;);&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">index</span><span style="color: #000000">&nbsp;INDEX_BBB&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;BBB(merchantid)<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;tablespace&nbsp;SSS<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;pctfree&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;initrans&nbsp;</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;maxtrans&nbsp;</span><span style="font-weight: bold; color: #800000">255</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;storage<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;(<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;initial&nbsp;10M<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;minextents&nbsp;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;maxextents&nbsp;unlimited<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;);&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">index</span><span style="color: #000000">&nbsp;INDEX_CCC </span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;CCC(userid)<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;tablespace&nbsp;SSS<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;pctfree&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;initrans&nbsp;</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;maxtrans&nbsp;</span><span style="font-weight: bold; color: #800000">255</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;storage<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;(<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;initial&nbsp;10M<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;minextents&nbsp;</span><span style="font-weight: bold; color: #800000">5</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;maxextents&nbsp;unlimited<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;);&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><img src ="http://www.blogjava.net/hao446tian/aggbug/380861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2012-06-15 14:51 <a href="http://www.blogjava.net/hao446tian/archive/2012/06/15/380861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle创建表时Storage参数具体含义</title><link>http://www.blogjava.net/hao446tian/archive/2011/10/28/362218.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Fri, 28 Oct 2011 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/10/28/362218.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/362218.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/10/28/362218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/362218.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/362218.html</trackback:ping><description><![CDATA[<p>本文通过图表和实例的阐述在Oracle数据库创建新表时Storage的参数具体含义。</p>
<p><br />　　可用于：表空间、回滚段、表、索引、分区、快照、快照日志</p>
<div><br />
<table bordercolor="#000000" cellspacing="0" bordercolordark="#ffffff" cellpadding="0" width="85%" bordercolorlight="#000000" border="1">
<tbody>
<tr bgcolor="#e0efff">
<td width="70">参数名称</td>
<td width="80">缺省值</td>
<td width="80">最小值</td>
<td width="90">最大值</td>
<td>说明</td></tr>
<tr>
<td>INITIAL</td>
<td>5（数据块）</td>
<td>2（数据块）</td>
<td>操作系统限定</td>
<td>分配给Segment的第一个Extent的大小，以字节为单位，这个参数不能在alter语句中改变，如果指定的值小于最小值，则按最小值创建。</td></tr>
<tr>
<td>NEXT</td>
<td>5（数据块）</td>
<td>1（数据块）</td>
<td>操作系统限定</td>
<td>第二个Extent的大小等于NEXT的初值，以后的NEXT值=前一NEXT大小乘以（1+PCTINCREASE/100），如果指定的值小于最小值，则按最小值创建。<br />如果在alter语句中改变NEXT的值，则下一个分配的Extent将具有指定的大小，而不管上一次分配的Extent大小和PCTINCREASE参数值。</td></tr>
<tr>
<td>MINEXTENTS</td>
<td>1（Extent）<br />回滚段为2个Extent</td>
<td>1（Extent）<br />回滚段为2个Extent</td>
<td>操作系统限定</td>
<td>Segment第一次创建时分配的Extent数量</td></tr>
<tr>
<td>MAXEXTENTS</td>
<td>根据数据块大小而定</td>
<td>1（Extent）<br />回滚段为2个Extent</td>
<td>无限制</td>
<td>随着Segment中数据量的增长，最多可分配的Extent数量</td></tr>
<tr>
<td>PCTINCREASE</td>
<td>50%<br /><br /><br />（Oracle816中为0%）</td>
<td>0%</td>
<td>操作系统限定</td>
<td>指定第三个及其后的Extent相对于上一个Extent所增加的百分比，<br />如果PCTINCREASE为0，则Segment中所有新增加的Extent的大小都相同，等于NEXT的值，<br />如果PCTINCREASE大于0，则每次计算NEXT的值（用上面的公式），<br />PCTINCREASE不能为负数。<br />创建回滚段时，不可指定此参数，回滚段中此参数固定为0。</td></tr>
<tr>
<td>OPTIMAL</td>
<td>----</td>
<td>不能小于回滚段初始分配空间</td>
<td>操作系统限定</td>
<td>仅与回滚段有关，当回滚段因为增长、扩展而超过此参数的设定范围时，Oracle系统会根据情况动态地重新分配Extents，试图收回多分配的Extent。</td></tr>
<tr></tr>
<tr>
<td>FREELISTS</td>
<td>1</td>
<td>1</td>
<td>数据块大小限制</td>
<td>只能在CREATE TABLE、CLUSTER、INDEX中指定FREELISTS和FREELIST GROUPS参数。<br />模式对象中每一个自由列表组中自由列表的数量</td></tr>
<tr>
<td>FREELIST GROUPS</td>
<td>1</td>
<td>1</td>
<td>取决于Oracle并行实例的数量</td>
<td>用户创建的数据库对象的自由列表组的数量，只有用OPS并行服务器选项时才使用这一参数，一个实例对应一个组。</td></tr>
<tr>
<td>BUFFER_POOL</td>
<td>----</td>
<td>----</td>
<td>----</td>
<td>给模式对象定义缺省缓冲池（高速缓存），该对象的所有块都存储在指定的高速缓存中，对于表空间或回滚段无效。</td></tr></tbody></table><pre><br />　　建议PCTINCREASE参数设置为0，可使碎片最小化，使每一个Extent都相同（等于NEXT值） <br />　　一旦建立了某个对象，它的INITIAL和MINEXTENTS参数不能修改（Oracle 816中可修改MINEXTENTS参数） <br />　　对于NEXT和PCTINCREASE的任何修改都只影响后来分配的那些Extent <br />　　在分配一个新Extent时，系统直接按NEXT的值分配一个Extent， <br />　　然后用公式：前一NEXT值*(1+PCTINCREASE/100) 计算出下一个应该分配的Extent的大小， <br />　　并把计算结果保存到相关数据字典的NEXT_EXTENT列上，做为下一个应该分配的Extent的大小。 <br />　　<br />　　CREATE TABLE test(a number)<br />　　STORAGE(<br />　　INITIAL 100K<br />　　NEXT 100K<br />　　MINEXTENTS 2<br />　　MAXEXTENTS 100<br />　　PCTINCREASE 100);<br />　　解释： <br />　　初始给test表分配两个Extent， <br />　　第一个Extent是100K，因INITIAL=100K； <br />　　第二个Extent是100K，因NEXT=100K； <br />　　假如因表内数据增长，需要分配第三个Extent，因PCTINCREASE是100，则 <br />　　第三个Extent是200K=100K+100K； <br />　　第四个Extent是400K=200K+200K。 <br />　　可通过数据字典表DBA_TABLES、ALL_TABLES、USER_TABLES查看参数设置情况，如： <br />　　<br />　　select table_name,initial_extent,next_extent,<br />　　min_extents,max_extents,pct_increase from user_tables;<br />　　TABLE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE<br />　　---------- -------------- ----------- ----------- ----------- ------------<br />　　TEST 106496 212992 2 100 100</pre></div><img src ="http://www.blogjava.net/hao446tian/aggbug/362218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-10-28 09:51 <a href="http://www.blogjava.net/hao446tian/archive/2011/10/28/362218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 优化(1)转) </title><link>http://www.blogjava.net/hao446tian/archive/2011/10/21/361750.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Fri, 21 Oct 2011 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/10/21/361750.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/361750.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/10/21/361750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/361750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/361750.html</trackback:ping><description><![CDATA[<p>1 前言 2<br />2 总纲 2<br />3 降龙十八掌 3<br />第一掌 避免对列的操作 3<br />第二掌 避免不必要的类型转换 4<br />第三掌 增加查询的范围限制 4<br />第四掌 尽量去掉&#8221;IN&#8221;、&#8221;OR&#8221; 4<br />第五掌 尽量去掉 &#8220;&lt;&gt;&#8221; 5<br />第六掌 去掉Where子句中的IS NULL和IS NOT NULL 5<br />第七掌 索引提高数据分布不均匀时查询效率 5<br />第八掌 利用HINT强制指定索引 6<br />第九掌 屏蔽无用索引 6<br />第十掌 分解复杂查询，用常量代替变量 7<br />第十一掌 like子句尽量前端匹配 7<br />第十二掌 用Case语句合并多重扫描 7<br />第十三掌 使用nls_date_format 8<br />第十四掌 使用基于函数的索引 8<br />第十五掌 基于函数的索引要求等式匹配 9<br />第十六掌 使用分区索引 9<br />第十七掌 使用位图索引 9<br />第十八掌 决定使用全表扫描还是使用索引 9<br />4 总结 10</p>
<div>1 前言<br />客服业务受到SQL语句的影响非常大，在规模比较大的局点，往往因为一个小的SQL语句不够优化，导致数据库性能急剧下降，小型机idle所剩无几，应用 服务器断连、超时，严重影响业务的正常运行。因此，称低效的SQL语句为客服业务的&#8216;恶龙&#8217;并不过分。数据库的优化方法有很多种，在应用层来说，主要是基 于索引的优化。本次秘笈根据实际的工作经验，在研发原来已有的方法的基础上，进行了一些扩充，总结了基于索引的SQL语句优化的降龙十八掌，希望有一天你 能用其中一掌来驯服客服业务中横行的&#8216;恶龙&#8217;。<br />2 总纲<br />l 建立必要的索引<br />这次传授的降龙十八掌，总纲只有一句话：建立必要的索引，这就是后面降龙十八掌的内功基础。这一点看似容易实际却很难。难就难在如何判断哪些索引是必要 的，哪些又是不必要的。判断的最终标准是看这些索引是否对我们的数据库性能有所帮助。具体到方法上，就必须熟悉数据库应用程序中的所有SQL语句，从中统 计出常用的可能对性能有影响的部分SQL，分析、归纳出作为Where条件子句的字段及其组合方式；在这一基础上可以初步判断出哪些表的哪些字段应该建立 索引。其次，必须熟悉应用程序。必须了解哪些表是数据操作频繁的表；哪些表经常与其他表进行连接；哪些表中的数据量可能很大；对于数据量大的表，其中各个 字段的数据分布情况如何；等等。对于满足以上条件的这些表，必须重点关注，因为在这些表上的索引，将对SQL语句的性能产生举足轻重的影响。不过下面还是 总结了一下降龙十八掌内功的入门基础，建立索引常用的规则如下：<br />1、表的主键、外键必须有索引；<br />2、数据量超过300的表应该有索引；<br />3、经常与其他表进行连接的表，在连接字段上应该建立索引；<br />4、经常出现在Where子句中的字段，特别是大表的字段，应该建立索引；<br />5、索引应该建在选择性高的字段上；<br />6、索引应该建在小字段上，对于大的文本字段甚至超长字段，不要建索引；<br />7、复合索引的建立需要进行仔细分析；尽量考虑用单字段索引代替：<br />A、正确选择复合索引中的主列字段，一般是选择性较好的字段；<br />B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中？单字段查询是否极少甚至没有？如果是，则可以建立复合索引；否则考虑单字段索引；<br />C、如果复合索引中包含的字段经常单独出现在Where子句中，则分解为多个单字段索引；<br />D、如果复合索引所包含的字段超过3个，那么仔细考虑其必要性，考虑减少复合的字段；<br />E、如果既有单字段索引，又有这几个字段上的复合索引，一般可以删除复合索引；<br />8、频繁进行数据操作的表，不要建立太多的索引；<br />9、删除无用的索引，避免对执行计划造成负面影响；<br />以上是一些普遍的建立索引时的判断依据。一言以蔽之，索引的建立必须慎重，对每个索引的必要性都应该经过仔细分析，要有建立的依据。因为太多的索引与不充 分、不正确的索引对性能都毫无益处：在表上建立的每个索引都会增加存储开销，索引对于插入、删除、更新操作也会增加处理上的开销。 另外，过多的复合索引，在有单字段索引的情况下，一般都是没有存在价值的；相反，还会降低数据增加删除时的性能，特别是对频繁更新的表来说，负面影响更 大。<br />3 降龙十八掌</div>
<div>第一掌 避免对列的操作<br />任何对列的操作都可能导致全表扫描，这里所谓的操作包括数据库函数、计算表达式等等，查询时要尽可能将操作移至等式的右边，甚至去掉函数。<br />例1：下列SQL条件语句中的列都建有恰当的索引，但30万行数据情况下执行速度却非常慢：<br />select * from record where substrb(CardNo,1,4)=&#8217;5378&#8242;(13秒)<br />select * from record where amount/30&lt; 1000（11秒）<br />select * from record where to_char(ActionTime,&#8217;yyyymmdd&#8217;)=&#8217;19991201&#8242;（10秒）<br />由于where子句中对列的任何操作结果都是在SQL运行时逐行计算得到的，因此它不得不进行表扫描，而没有使用该列上面的索引；如果这些结果在查询编译时就能得到，那么就可以被SQL优化器优化，使用索引，避免表扫描，因此将SQL重写如下：<br />select * from record where CardNo like &#8216;5378%&#8217;（&lt; 1秒）<br />select * from record where amount &lt; 1000*30（&lt; 1秒）<br />select * from record where ActionTime= to_date (&#8217;19991201&#8242; ,&#8217;yyyymmdd&#8217;)（&lt; 1秒）<br />差别是很明显的！</div>
<div>第二掌 避免不必要的类型转换<br />需要注意的是，尽量避免潜在的数据类型转换。如将字符型数据与数值型数据比较，ORACLE会自动将字符型用to_number()函数进行转换，从而导致全表扫描。<br />例2：表tab1中的列col1是字符型（char)，则以下语句存在类型转换：<br />select col1,col2 from tab1 where col1&gt;10，<br />应该写为： select col1,col2 from tab1 where col1&gt;&#8217;10&#8242;。</div>
<div>第三掌 增加查询的范围限制<br />增加查询的范围限制，避免全范围的搜索。<br />例3：以下查询表record 中时间ActionTime小于2001年3月1日的数据：<br />select * from record where ActionTime &lt; to_date (&#8217;20010301&#8242; ,&#8217;yyyymm&#8217;)<br />查询计划表明，上面的查询对表进行全表扫描，如果我们知道表中的最早的数据为2001年1月1日，那么，可以增加一个最小时间，使查询在一个完整的范围之内。修改如下： select * from record where<br />ActionTime &lt; to_date (&#8217;20010301&#8242; ,&#8217;yyyymm&#8217;)<br />and ActionTime &gt; to_date (&#8217;20010101&#8242; ,&#8217;yyyymm&#8217;)<br />后一种SQL语句将利用上ActionTime字段上的索引，从而提高查询效率。把&#8217;20010301&#8242;换成一个变量，根据取值的机率，可以有一半以上的 机会提高效率。同理，对于大于某个值的查询，如果知道当前可能的最大值，也可以在Where子句中加上 &#8220;AND 列名&lt; MAX(最大值)&#8221;。</div>
<div>第四掌 尽量去掉&#8221;IN&#8221;、&#8221;OR&#8221;<br />含有&#8221;IN&#8221;、&#8221;OR&#8221;的Where子句常会使用工作表，使索引失效；如果不产生大量重复值，可以考虑把子句拆开；拆开的子句中应该包含索引。<br />例4： select count(*) from stuff where id_no in(&#8217;0&#8242;,&#8217;1&#8242;)（23秒）<br />可以考虑将or子句分开：<br />select count(*) from stuff where id_no=&#8217;0&#8242;<br />select count(*) from stuff where id_no=&#8217;1&#8242;<br />然后再做一个简单的加法，与原来的SQL语句相比，查询速度更快。</div>
<div>第五掌 尽量去掉 &#8220;&lt;&gt;&#8221;<br />尽量去掉 &#8220;&lt;&gt;&#8221;，避免全表扫描，如果数据是枚举值，且取值范围固定，则修改为&#8221;OR&#8221;方式。<br />例5：<br />UPDATE SERVICEINFO SET STATE=0 WHERE STATE&lt;&gt;0;<br />以上语句由于其中包含了&#8221;&lt;&gt;&#8221;，执行计划中用了全表扫描（TABLE ACCESS FULL），没有用到state字段上的索引。实际应用中，由于业务逻辑的限制，字段state为枚举值，只能等于0，1或2，而且，值等于=1，2的很 少，因此可以去掉&#8221;&lt;&gt;&#8221;，利用索引来提高效率。<br />修改为：UPDATE SERVICEINFO SET STATE=0 WHERE STATE = 1 OR STATE = 2 。进一步的修改可以参考第4种方法。<br />第六掌 去掉Where子句中的IS NULL和IS NOT NULL<br />Where字句中的IS NULL和IS NOT NULL将不会使用索引而是进行全表搜索，因此需要通过改变查询方式，分情况讨论等方法，去掉Where子句中的IS NULL和IS NOT NULL。</div>
<div>第七掌 索引提高数据分布不均匀时查询效率<br />索引的选择性低，但数据的值分布差异很大时，仍然可以利用索引提高效率。A、数据分布不均匀的特殊情况下，选择性不高的索引也要创建。<br />表ServiceInfo中数据量很大，假设有一百万行，其中有一个字段DisposalCourseFlag，取值范围为枚举值：[0，1，2，3， 4，5，6，7]。按照前面说的索引建立的规则，&#8220;选择性不高的字段不应该建立索引，该字段只有8种取值，索引值的重复率很高，索引选择性明显很低，因此 不建索引。然而，由于该字段上数据值的分布情况非常特殊，具体如下表：<br />取值范围 1~5 6 7<br />占总数据量的百分比 1% 98% 1%<br />而且，常用的查询中，查询DisposalCourseFlag&lt;6 的情况既多又频繁，毫无疑问，如果能够建立索引，并且被应用，那么将大大提高这种情况的查询效率。因此，我们需要在该字段上建立索引。</div>
<div>第八掌 利用HINT强制指定索引<br />在ORACLE优化器无法用上合理索引的情况下，利用HINT强制指定索引。<br />继续上面7的例子，ORACLE缺省认定，表中列的值是在所有数据行中均匀分布的，也就是说，在一百万数据量下，每种 DisposalCourseFlag值各有12.5万数据行与之对应。假设SQL搜索条件DisposalCourseFlag=2，利用 DisposalCourseFlag列上的索引进行数据搜索效率，往往不比全表扫描的高，ORACLE因此对索引&#8220;视而不见&#8221;，从而在查询路径的选择 中，用其他字段上的索引甚至全表扫描。根据我们上面的分析，数据值的分布很特殊，严重的不均匀。为了利用索引提高效率，此时，一方面可以单独对该字段或该 表用analyze语句进行分析，对该列搜集足够的统计数据，使ORACLE在查询选择性较高的值时能用上索引；另一方面，可以利用HINT提示，在 SELECT关键字后面，加上&#8220;/*+ INDEX(表名称，索引名称）*/&#8221;的方式，强制ORACLE优化器用上该索引。<br />比如： select * from serviceinfo where DisposalCourseFlag=1 ;<br />上面的语句，实际执行中ORACLE用了全表扫描，加上蓝色提示部分后，用到索引查询。如下：<br />select /*+ INDEX(SERVICEINFO,IX_S_DISPOSALCOURSEFLAG) */ *<br />from serviceinfo where DisposalCourseFlag=1;<br />请注意，这种方法会加大代码维护的难度，而且该字段上索引的名称被改变之后，必须要同步所有指定索引的HINT代码，否则HINT提示将被ORACLE忽略掉。</div>
<div>第九掌 屏蔽无用索引<br />继续上面8的例子，由于实际查询中，还有涉及到DisposalCourseFlag=6的查询，而此时如果用上该字段上的索引，将是非常不明智的，效率 也极低。因此这种情况下，我们需要用特殊的方法屏蔽该索引，以便ORACLE选择其他字段上的索引。比如，如果字段为数值型的就在表达式的字段名后，添加 &#8220;+ 0&#8221;，为字符型的就并上空串：&#8220;||&#8221;"&#8221;<br />如： select * from serviceinfo where DisposalCourseFlag+ 0 = 6 and workNo = &#8216;36&#8242; 。<br />不过，不要把该用的索引屏蔽掉了，否则同样会产生低效率的全表扫描。</div>
<div>第十掌 分解复杂查询，用常量代替变量<br />对于复杂的Where条件组合，Where中含有多个带索引的字段，考虑用IF语句分情况进行讨论；同时，去掉不必要的外来参数条件，减低复杂度，以便在不同情况下用不同字段上的索引。<br />继续上面9的例子，对于包含<br />Where (DisposalCourseFlag &lt; v_DisPosalCourseFlag) or (v_DisPosalCourseFlag is null) and &#8230;.的查询，(这里v_DisPosalCourseFlag为一个输入变量，取值范围可能为[NULL，0，1，2，3，4，5，6，7])，可以 考虑分情况用IF语句进行讨论，类似：<br />IF v_DisPosalCourseFlag =1 THEN<br />Where DisposalCourseFlag = 1 and &#8230;.<br />ELSIF v_DisPosalCourseFlag =2 THEN<br />Where DisposalCourseFlag = 2 and &#8230;.<br />。。。。。。</div>
<div>第十一掌 like子句尽量前端匹配<br />因为like参数使用的非常频繁，因此如果能够对like子句使用索引，将很高的提高查询的效率。<br />例6：select * from city where name like &#8216;%S%&#8217;<br />以上查询的执行计划用了全表扫描（TABLE ACCESS FULL），如果能够修改为：<br />select * from city where name like &#8216;S%&#8217;<br />那么查询的执行计划将会变成（INDEX RANGE SCAN），成功的利用了name字段的索引。这意味着Oracle SQL优化器会识别出用于索引的like子句，只要该查询的匹配端是具体值。因此我们在做like查询时，应该尽量使查询的匹配端是具体值，即使用 like &#8216;S%&#8217;。</div>
<div>第十二掌 用Case语句合并多重扫描<br />我们常常必须基于多组数据表计算不同的聚集。例如下例通过三个独立查询：<br />例8：1）select count(*) from emp where sal&lt;1000;<br />2）select count(*) from emp where sal between 1000 and 5000;<br />3）select count(*) from emp where sal&gt;5000;<br />这样我们需要进行三次全表查询，但是如果我们使用case语句：<br />select<br />count (sale when sal &lt;1000<br />then 1 else null end) count_poor,<br />count (sale when between 1000 and 5000<br />then 1 else null end) count_blue_collar,<br />count (sale when sal &gt;5000<br />then 1 else null end) count_poor<br />from emp;<br />这样查询的结果一样，但是执行计划只进行了一次全表查询。</div>
<div>第十三掌 使用nls_date_format<br />例9：<br />select * from record where to_char(ActionTime,&#8217;mm&#8217;)=&#8217;12&#8242;<br />这个查询的执行计划将是全表查询，如果我们改变nls_date_format，<br />SQL&gt;alert session set nls_date_formate=&#8217;MM&#8217;;<br />现在重新修改上面的查询：<br />select * from record where ActionTime=&#8217;12&#8242;<br />这样就能使用actiontime上的索引了，它的执行计划将是（INDEX RANGE SCAN）。</div>
<div>第十四掌 使用基于函数的索引<br />前面谈到任何对列的操作都可能导致全表扫描，例如：<br />select * from emp where substr(ename,1,2)=&#8217;SM&#8217;;<br />但是这种查询在客服系统又经常使用，我们可以创建一个带有substr函数的基于函数的索引，<br />create index emp_ename_substr on eemp ( substr(ename,1,2) );</div>
<div>这样在执行上面的查询语句时，这个基于函数的索引将排上用场，执行计划将是（INDEX RANGE SCAN）。</div>
<div>第十五掌 基于函数的索引要求等式匹配<br />上面的例子中，我们创建了基于函数的索引，但是如果执行下面的查询：<br />select * from emp where substr(ename,1,1)=&#8217;S&#8217;<br />得到的执行计划将还是（TABLE ACCESS FULL），因为只有当数据列能够等式匹配时，基于函数的索引才能生效，这样对于这种索引的计划和维护的要求都很高。请注意，向表中添加索引是非常危险的 操作，因为这将导致许多查询执行计划的变更。然而，如果我们使用基于函数的索引就不会产生这样的问题，因为Oracle只有在查询使用了匹配的内置函数时 才会使用这种类型的索引。</div>
<div>第十六掌 使用分区索引<br />在用分析命令对分区索引进行分析时，每一个分区的数据值的范围信息会放入Oracle的数据字典中。Oracle可以利用这个信息来提取出那些只与SQL查询相关的数据分区。<br />例如，假设你已经定义了一个分区索引，并且某个SQL语句需要在一个索引分区中进行一次索引扫描。Oracle会仅仅访问这个索引分区，而且会在这个分区上调用一个此索引范围的快速全扫描。因为不需要访问整个索引，所以提高了查询的速度。</div>
<div>第十七掌 使用位图索引<br />位图索引可以从本质上提高使用了小于1000个唯一数据值的数据列的查询速度，因为在位图索引中进行的检索是在RAM中完成的，而且也总是比传统的B树索引的速度要快。对于那些少于1000个唯一数据值的数据列建立位图索引，可以使执行效率更快。</div>
<div>第十八掌 决定使用全表扫描还是使用索引<br />和所有的秘笈一样，最后一招都会又回到起点，最后我们来讨论一下是否需要建立索引，也许进行全表扫描更快。在大多数情况下，全表扫描可能会导致更多的物理 磁盘输入输出，但是全表扫描有时又可能会因为高度并行化的存在而执行的更快。如果查询的表完全没有顺序，那么一个要返回记录数小于10％的查询可能会读取 表中大部分的数据块，这样使用索引会使查询效率提高很多。但是如果表非常有顺序，那么如果查询的记录数大于40％时，可能使用全表扫描更快。因此，有一个 索引范围扫描的总体原则是：<br />1）对于原始排序的表 仅读取少于表记录数40％的查询应该使用索引范围扫描。反之，读取记录数目多于表记录数的40％的查询应该使用全表扫描。<br />2）对于未排序的表 仅读取少于表记录数7％的查询应该使用索引范围扫描。反之，读取记录数目多于表记录数的7％的查询应该使用全表扫描。</div>
<div>4 总结<br />以上的招式，是完全可以相互结合同时运用的。而且各种方法之间相互影响，紧密联系。这种联系既存在一致性，也可能带来冲突，当冲突发生时，需要根据实际情况进行选择，没有固定的模式。最后决定SQL优化功力的因素就是对ORACLE内功的掌握程度了。<br />另外，值得注意的是：随着时间的推移和数据的累计与变化，ORACLE对SQL语句的执行计划也会改变，比如：基于代价的优化方法，随着数据量的增大，优 化器可能错误的不选择索引而采用全表扫描。这种情况可能是因为统计信息已经过时，在数据量变化很大后没有及时分析表；但如果对表进行分析之后，仍然没有用 上合理的索引，那么就有必要对SQL语句用HINT提示，强制用合理的索引。但这种HINT提示也不能滥用，因为这种方法过于复杂，缺乏通用性和应变能 力，同时也增加了维护上的代价；相对来说，基于函数右移、去掉&#8220;IN ，OR ，&lt;&gt; ，IS NOT NULL &#8221;、分解复杂的SQL语句等等方法，却是&#8220;放之四海皆准&#8221;的，可以放心大胆的使用。<br />同时，优化也不是&#8220;一劳永逸&#8221;的，必须随着情况的改变进行相应的调整。当数据库设计发生变化，包括更改表结构：字段和索引的增加、删除或改名等；业务逻辑发生变化：如查询方式、取值范围发生改变等等。在这种情况下，也必须对原有的优化进行调整，以适应效率上的需求。</div><img src ="http://www.blogjava.net/hao446tian/aggbug/361750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-10-21 16:46 <a href="http://www.blogjava.net/hao446tian/archive/2011/10/21/361750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle一个sequence重置的方法</title><link>http://www.blogjava.net/hao446tian/archive/2011/03/14/346187.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Mon, 14 Mar 2011 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/03/14/346187.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/346187.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/03/14/346187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/346187.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/346187.html</trackback:ping><description><![CDATA[<p>如果直接drop掉，与这个sequence相关的function trigger什么的在下次运行的时候都会重新编译，而且编译有可能会失败，所以采用了下边的方法：</p>
<p>假设sequence seq属性如下：<br />
increment 1<br />
minvalue 1</p>
<p>则用下边方法：<br />
alter sequence seq minvalue 0;<br />
select seq.nextval from dual; --假设值是30<br />
alter sequence seq increment by -30;<br />
select seq.nextval from dual; --会得到0<br />
alter sequence seq minvalue by 1;<br />
alter sequence seq increment by 1;</p>
<p>这样之后再取的时候就会从1开始了。</p>
<img src ="http://www.blogjava.net/hao446tian/aggbug/346187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-03-14 09:59 <a href="http://www.blogjava.net/hao446tian/archive/2011/03/14/346187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE 行转列</title><link>http://www.blogjava.net/hao446tian/archive/2011/03/14/346186.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Mon, 14 Mar 2011 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/03/14/346186.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/346186.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/03/14/346186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/346186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/346186.html</trackback:ping><description><![CDATA[select t.task_id,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max(decode(t.ps_org_no, '35406', t.value)) a,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max(decode(t.ps_org_no, '3540601', t.value)) b,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max(decode(t.ps_org_no, '3540602', t.value)) c,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max(decode(t.ps_org_no, '3540603', t.value)) d<br />from s_csqe_eva_rslt t<br />where t.task_id = '28884'<br />&nbsp;&nbsp; and t.content_id = '24730'<br />group by t.task_id; 
<p>&nbsp;<br />删除重复值</p>
<p>方法二： delete from demo where rowid in <br />(select rid from <br />(select rowid rid,row_number() over(partition by object_id order by rowid) rn <br />from demo) <br />where rn &lt;&gt; 1 ); <br />耗时：30秒 </p>
<p>方法三： create table demo2 as <br />select object_id,owner... from <br />(select demo.*,row_number() over(partition by object_id order by rowid) rn from demo) <br />where rn = 1; <br />truncate table demo; insert into demo select * from demo2; drop table demo2; <br />共耗时： 10秒，适合大数据量的情况，产生更少回滚量； </p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/hao446tian/aggbug/346186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-03-14 09:54 <a href="http://www.blogjava.net/hao446tian/archive/2011/03/14/346186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle的level虚列的使用</title><link>http://www.blogjava.net/hao446tian/archive/2011/03/14/346185.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Mon, 14 Mar 2011 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/03/14/346185.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/346185.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/03/14/346185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/346185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/346185.html</trackback:ping><description><![CDATA[<p>SELECT 0 id, '' org_no, '' org_name<br />
FROM dual<br />
UNION<br />
SELECT 1 id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.org_no || ',' || a.org_type org_no,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpad('　', 4 * (LEVEL - 1)) || a.org_name org_name<br />
FROM o_org a<br />
WHERE LEVEL &lt;= 4<br />
START WITH a.org_no = '35406'<br />
CONNECT BY a.p_org_no = PRIOR a.org_no</p>
<img src ="http://www.blogjava.net/hao446tian/aggbug/346185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-03-14 09:53 <a href="http://www.blogjava.net/hao446tian/archive/2011/03/14/346185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>