??xml version="1.0" encoding="utf-8" standalone="yes"?>色偷偷尼玛图亚洲综合,日韩色日韩视频亚洲网站,ass亚洲**毛茸茸picshttp://www.tkk7.com/henry1451/articles/208946.htmlhenry1451henry1451Wed, 18 Jun 2008 09:42:00 GMThttp://www.tkk7.com/henry1451/articles/208946.htmlhttp://www.tkk7.com/henry1451/comments/208946.htmlhttp://www.tkk7.com/henry1451/articles/208946.html#Feedback0http://www.tkk7.com/henry1451/comments/commentRss/208946.htmlhttp://www.tkk7.com/henry1451/services/trackbacks/208946.html本文来自:http://www.tkk7.com/improviser/archive/2007/10/02/150166.html

    关系数据库在不断地发展时Q许多数据库引入了面向对象的思想Q这其中以OracleZ表,Oracle9i号U面向对象数据库?/font> 自Oracle9i以来QOracle׃再是单纯的关pL据库理pȝQ它在关pL据库模型的基上,d了一pd面向对象的特性。Oracle的对象体p遵从面向对象思想的基本特征,许多概念同C++,JAVA中类|hl承Q重载,多态等特征Q但又有自己的特炏V?br />
1?
Oracle面向对象的最基本元素是它的对象类型—?strong>Type?br /> 下面开始写自定义对象类? as object 必须关键?

1 create or replace type ADDRESS as object
2 (
3      PROVINCE varchar(10),
4      CITY varchar(20),
5      STREET varchar(30)
6 );


创徏表ƈ使用以上对象cdADDRESS

1 create table STUDENTOBJ 
2 (
3     STUNAME varchar(20),
4     STUADD  ADDRESS
5 );
6 
7 向表中插入数据:
8 insert into STUDENTOBJ values('improviser',ADDRESS('q东?/span>','q州?/span>'Q?/span>'江v大道');


通过别名对表q行查询

1 select S.STUNAME S.ADDRESS.PROVINCE S.ADDRESS.CITY
2 S.ADDRESS.STREET 
from STUDENTOBJ S;


从上面的试代码Q可以很Ҏ看到其与面向对象语言Q比如JavaQ的差异Q不必用new创徏实例Q也没有了默认无参数构造器Q默认用定义的属性作为构造器参数Q以描q各U实体。另外,Type的属性没有private,protected,public的说法,所有的属性调用者都可以讉KQ即都是public?br />
2、Oracle中面向对象特征—?strong>l承(父类型必d明ؓNOT FINAL,子类型用关键字UNDER)

 1 创徏父类?br />  2 create or replace type PERSON as object
 3 (
 4     PERNAME varchar(10),
 5     PERSEX varchar(2)
 6 )not final;
 7 
 8 子类型承父cd
 9 create or replace type STUDENT under PERSON
10 (
11     STUNO varchar(8),
12     STUSCORE varchar(10)
13 );

׃上定义,其子cd中属性包含了父类型中所有属性?br />

3、可变数l?/strong>
可变数组Q是一U集合。一个可变数l是对象的一个集合,其中每个对象都具有相同的数据cd。可变数l的大小由创建时军_。在表中建立可变数组后,可变数组在主表中作ؓ一个列对待?/font>

 1 创徏对象cd
 2 create or replace type ADDRESS as object
 3 (
 4     PROVINCE varchar(10),
 5     CITY varchar(20),
 6 );
 7 
 8 创徏ADDRESS可变数组
 9 create or replace type ADDRESS_LIST as varray(3of ADDRESS;
10 
11 创徏表ƈ使用可变数组ADDRESS_LIST
12 create table STUDENT 
13 (
14     STUNAME varchar(20),
15     STUADDS ADDRESS_LIST
16 );
17 
18 向表中插入数?br /> 19 insert into STUDENT values('improviser',ADDRESS_LIST(ADDRESS('q东?/span>','q州?/span>','江v大道'),
                                           ADDRESS(
'q东?/span>','潮州?/span>','潮枫?/span>')));
20 
21 查询(使用table函数数据表格Ş式输?
22 select *from table(select s.STUADDS from STUDENT where STUNAME='improviser');


4、嵌套表
嵌套表是表中之表Q一个嵌套表是某些行的集合,它在主表中表CZؓ其中的一列。对主表中的每一条记录,嵌套表可以包含多个行?/font>

 1 定义嵌套表方法:
 2 create or replace type ADDRESS_TABLE as table of ADDRESS;
 3 
 4 基本对象cd、创、查询和插入数据都跟上面可变数组一?br />  5 
 6 嵌套表更?/span>Q?/span>table转化再利用表别名操作列进行更?/span>Q?/span>
 7 update table(select S.STUADDS from STUDENT S where
 
8  S.STUNAME = 'improviser') AD set AD.PROVINCE = '北京' where city = 'q州';
 9
10删除嵌套表记?br /> 11delete from table(select S.STUADDS from STUDENT S
12  
where S.STUNAME = 'improviser') AD where AD.city = '潮州?;
13



    比较Q可变数l,查询速度快,但是更新困难得整体更斎ͼ适用与数据不修改情况Q如ȝ处方。用嵌套表可以对表中的表内容进行修改而无需q行整体更新操作?/font>

4、对象表

 1 首先创徏对象cd
 2 create or replace type OFFICETYPE as object
 3 (
 4     id varchar(10),
 5     typename varchar(20)
 6 );
 7 
 8 对象类型{化ؓ对象?br />  9 create table office of officetype;
10 
11 创徏对象关系表(使用ref Q指COIDq行对象表关联)
12 create table worker
13 (
14     workerid varchar(10primary key,
15     workername varchar(20),
16     workeroffice ref officetpey scope is office,
17     phone varchar(20)
18 );
19 
20 使用deref 取得兌对象表相兛_?br /> 21 select workerid,workername,deref(w.workeroffice),phone from worker w
  
where workerid = 'C001';
22 l果?br /> 23 C001   张小?nbsp; OFFICETYPE('0001''财务U?/span>')      010-12345
24 
25 使用VALUE(别名)查询对象内容
26 select value(o) from office o;
27 


5、对象视?/font>

1 创徏对象视图Q通过OIDq接deptQ?br /> 2 create view deptview of deptype with object oid(deptno) as select *from deptQ?br /> 3 create view emp_view as select make_ref(deptview,deptno) deptoid,empno,ename
4   from emp;


好了Q有关Oracle中面向对象的内容q要叙q这么多了,虽然现在很少使用刎ͼ但在以后有用C处有一定的参考作用?/font>



henry1451 2008-06-18 17:42 发表评论
]]>
Oracle数据库对??http://www.tkk7.com/henry1451/articles/208940.htmlhenry1451henry1451Wed, 18 Jun 2008 09:37:00 GMThttp://www.tkk7.com/henry1451/articles/208940.htmlhttp://www.tkk7.com/henry1451/comments/208940.htmlhttp://www.tkk7.com/henry1451/articles/208940.html#Feedback0http://www.tkk7.com/henry1451/comments/commentRss/208940.htmlhttp://www.tkk7.com/henry1451/services/trackbacks/208940.htmlhttp://www.tkk7.com/improviser/archive/2007/10/01/150124.html

    本文研究有关Oracle数据库对象的用法。Oracle中包含五U数据库对象Q分别ؓ别名、序列、视图、烦引和,其中别名和序列ؓOracle中特有的数据库对象?br />
    别名Q通过对Oracle中数据表讄别名之后Q可以用别名对数据表进行与原表名同L各种操作。其语句关键字ؓsynonymQ下面看其具体用法?br />     创徏同义词:create synonym student for stu;
    通过创徏后,student即ؓstu表的别名Q因此以下两语句执行l果ZL
    select *from student;  ==>   select *from stu;
    删除同义词:drop synonym student;

    序列Q?/strong>作ؓOracle的特有对象,序列用来实现Oracle的主键自增,q是区别于其他关pL据库的。关键字?font color="#ff0000">sequence
?br />     创徏序列ҎQcreate sequence NumSeq increment by 1 start with 1 maxvalue 999;创徏一个序列从1开始递增量ؓ1q设|最大gؓ999?br />     序列使用Qinsert into testTable values(NumSeq.nextVal);
        nextVal
  q回下一个可用的?/span>
        currVal
  获得当前序列中?/span>   W一ơ需先返回一?/span>nextValQ才能取?strong>curr
Val?  
        Alter  sequence  修改序列定义: alter sequence NumSeq set maxvalue 1000;

    视图与烦引:其用法与其他数据库相同,q里不多赘述?br />
   
两表或多个表中存在相同列Q将相同列存储在一个空间中Q以节省I间?br />     创徏方法:
    create cluser classcluser
    (
           ClassNo varchar2(10)
    );
    为簇创徏索引  create index cluserIndex on cluser classcluser;

    创徏表StuClassq指向已定义?br />     create table StuClass
    (
           ClassNo varchar2(10)Q?br />            ClassName varchar2(20)
    )cluser classcluser(ClassNo);

    创徏表Studentq指向已定义?br />     create table Student
    (
           StuNo int,
           ClassNo varchar2(10)
    )cluser classcluser(ClassNo);


henry1451 2008-06-18 17:37 发表评论
]]>Oracle表分区ȝ(?http://www.tkk7.com/henry1451/articles/208932.htmlhenry1451henry1451Wed, 18 Jun 2008 09:28:00 GMThttp://www.tkk7.com/henry1451/articles/208932.htmlhttp://www.tkk7.com/henry1451/comments/208932.htmlhttp://www.tkk7.com/henry1451/articles/208932.html#Feedback0http://www.tkk7.com/henry1451/comments/commentRss/208932.htmlhttp://www.tkk7.com/henry1451/services/trackbacks/208932.htmlhttp://www.tkk7.com/improviser/archive/2007/10/01/150073.html


    Oracle中提供了对表q行分区的机Ӟ通过表分区,可以表I间中数据按照某U方式分别存攑ֈ特定的分Z?font size="4">表分区的作用Q?/font>qIO操作Q分区均匀Q提高效率?br />
   Oracle中表分区Ҏ有:范围分区法、散列分区法、复合分区法、列表分区法?br />
 范围分区:
语法
Partition  by  range(); 适合数值型或日期型
 
CZQ?/font>
 1 create table Student
 2(
 3     Studentid integer not null,
 4     Studentname varchar2(20),
 5     Score integer
 6)
 7 Partition by range(Score)
 8(
 9     Partition p1 values less than(60),
10     Partition p2 values less than(75),
11     Partition p3 values less than(85),
12     Partition p4 values less than(maxvalue)
13 );

  散列分区法:ҎOracle内部散列法存储Q语?Partition by hash();
 
实例Q?/font>
 1 create table department
 2 (
 3     Deptno int,
 4     Deptname varchar2(24)
 5 )
 6 Partition by hash(deptno)
 7 (
 8     Partition p1,
 9     Partition p2
10 );

  复合分区法:׃面两U方法复合而成
  CZQ?/font>
 1 create table salgrade
 2 (
 3     grade number,
 4     losal number,
 5     hisal number
 6 )
 7 Partition by range(grade)
 8 Subpartition by hash(losal,hisal)
 9 (
10     Partition p1 values less than(10),
11       (subpartition sp1,subpartition sp2),
12     Partition p2 values less than(20),
13       (subpartition sp3,subpartition sp4)
14 )

  列表分区法:适合字符?语法Partition by list()
  实例Q?/font>
 1 create table customer
 2 (
 3     custNo int,
 4     custname varchar(20),
 5     custState varchar(20)
 6 )
 7 Partition by list(custState)
 8 (
 9     Partition saia values('中国','韩国','日本'),
10     Partition Europe values('英国','俄国','法国'),
11     Partition ameria values('','加拿?/span>','墨西?/span>'),
12 );
13     

表分区维护:

d分区:alter table student add partition p5 values less than(120);
删除分区:alter table student drop partition p4;
截断分区:alter table student truncate partition p5;
合ƈ分区:alter table student merge partitions p3,p4 into partition p6;


henry1451 2008-06-18 17:28 发表评论
]]>Oracle之函C触发??http://www.tkk7.com/henry1451/articles/208931.htmlhenry1451henry1451Wed, 18 Jun 2008 09:23:00 GMThttp://www.tkk7.com/henry1451/articles/208931.htmlhttp://www.tkk7.com/henry1451/comments/208931.htmlhttp://www.tkk7.com/henry1451/articles/208931.html#Feedback0http://www.tkk7.com/henry1451/comments/commentRss/208931.htmlhttp://www.tkk7.com/henry1451/services/trackbacks/208931.htmlhttp://www.tkk7.com/improviser/archive/2007/10/05/150456.html


今天写有关Oracle中函C触发器的内容Q在数据库中定义q用存储过E、函数、触发器Q可以提高用戯问数据库的效率?br />
    数据库中函数包含四个部分Q?strong>声明、返回倹{函C和异常处?/strong>?br />
 1 create or replace function getname(sno varchar2)
 2  return varchar is
 3         name varchar(12);
 4  begin
 5         select ename into name from emp where empno=sno;
 6         return name;
 7  exception
 8        ...
12  end;
13 

   触发器是一U特D的存储q程Q类g其它~程语言中的事g函数Q允ؓ INSERT、UPDATE、DELETE 创徏触发器,当在表(视图Q中插入、更新、删除记?前、后)Ӟ触发一个或一pd T-SQL 语句?/font>

    创徏?/span>STUDENT表上的插入触发器Q当?/span>STUDENT表中插入数据时候触发器被触发Q执行体被执行
   插入触发?br />  1 create or replace trigger tg_insert
 2  before insert on student                Q-可设|在插入前或插入?br />  3  begin
 4        ...
 5  end;
 

   更新触发?br />  8  create or replace trigger tg_update
 9  after update on student
10  for each row
12  begin
13      ...
14  END;
15 

触发器两个特D行U变量: :New新?/span> ?/span> :Old旧?/span> 分别代表更新|被更新的?/span>

 1 create or replace trigger tg_insert
 2 after update on student
 3 for each row
 4 when (:old.sex=’j’)        Q-当old.sex为J时候才执行触发器内?br />  5 begin
 7    DBMS_OUTPUT.PUT_LINE(:new.stuname||'  '||:old.stuname);
 8    DBMS_OUTPUT.PUT_LINE(:new.sex||'  '||:old.sex);
 9 end;
10 

判断复合型触发器

 1 create or replace trigger trgstudeng
 2 before insert or update or delete on student
 3 for each row
 4 begin
 5     if  inserting then
 6     ...
 8     end if;
 9     if deleting then
10     ...
12     end if;
13 exception
14     ...
16 END;
17 

   触发器功能强大,可以实现许多复杂的功能,但如果滥用会造成数据库及应用E序的维护困难?br />

henry1451 2008-06-18 17:23 发表评论
]]>Jdbcq接Oracle常见错误汇?/title><link>http://www.tkk7.com/henry1451/articles/205162.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Sun, 01 Jun 2008 08:36:00 GMT</pubDate><guid>http://www.tkk7.com/henry1451/articles/205162.html</guid><wfw:comment>http://www.tkk7.com/henry1451/comments/205162.html</wfw:comment><comments>http://www.tkk7.com/henry1451/articles/205162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/henry1451/comments/commentRss/205162.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/henry1451/services/trackbacks/205162.html</trackback:ping><description><![CDATA[<br />     在开发JAVA应用E序?q接数据库是必不可少的一?如果是WEB应用E序,则可以采用数据库q接池等形式q接数据?如果是应用程?则采用JDBC的Ş式较?下面介绍下常见的错误及处理方?<br /> <br />     ?正确q接Oracle的方式是:<font style="background-color: #c4ecc9">DriverManager.getConnection("jdbc:oracle:thin:@serverNameOrIp:1521:sid","username","password"); </font><br /> <br /> 1)<font style="background-color: #c4ecc9">java.sql.SQLException: No suitable driver</font><br /> 处理Ҏ:一般是没有加入数据库驱??jdbc:oracle"格式写错.<br /> <br /> 2)<font style="background-color: #c4ecc9">java.sql.SQLException: 指定了无效的 Oracle URL</font><br /> 处理Ҏ:一般是jdbc:oracle:thin格式写错,如没写入:thin,或内容写?或@后面的服务器?或IP)写错,或端?1521)写错.<br /> <br /> 3)Connection refused(DESCRIPTION=(TMP=)(VSNNUM=150999297)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))......<br /> 处理Ҏ:一般是数据库实例ID写错,填写正确的SID卛_解决问题.<br /> <br /> <img src ="http://www.tkk7.com/henry1451/aggbug/205162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/henry1451/" target="_blank">henry1451</a> 2008-06-01 16:36 <a href="http://www.tkk7.com/henry1451/articles/205162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于oracle模糊查询like中的关键?/title><link>http://www.tkk7.com/henry1451/articles/204864.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Sat, 31 May 2008 09:18:00 GMT</pubDate><guid>http://www.tkk7.com/henry1451/articles/204864.html</guid><wfw:comment>http://www.tkk7.com/henry1451/comments/204864.html</wfw:comment><comments>http://www.tkk7.com/henry1451/articles/204864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/henry1451/comments/commentRss/204864.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/henry1451/services/trackbacks/204864.html</trackback:ping><description><![CDATA[<br />     在进行模p查询时,一般用的形式?like 'key%',like '%key',like '%key%' {几UŞ?其中key一般是固定的?q样从数据库表中查出所需的数?但最q做的一个Q务中有这L一需?即key是变化的,Ҏ不同的条件获取不同的key值做为like中的条g,来获取所需的数?想了一?需要用到oracle中的字符串连接符:|| ,如下:<br /> <br /> <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"><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000">  ue.</span><span style="color: #808080">*</span><span style="color: #000000">  </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> </span><span style="color: #ff00ff">user</span><span style="color: #000000"> ue </span><span style="color: #0000ff">WHERE</span><span style="color: #000000">  name </span><span style="color: #808080">LIKE</span><span style="color: #000000"> </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #808080">||</span><span style="color: #000000"> ( </span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> username </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> student st </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> st.stud_id</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1003</span><span style="color: #ff0000">'</span><span style="color: #000000">) </span><span style="color: #808080">||</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">%</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span></div> <br />     user是一张记录所有用户名{其他比较全的数?然后Ҏ学生ID查询学生姓名,因ؓ可能会有姓名相同的学?所以用此方法可以查询出user表中所有姓名相?如有王小和王华,王小兵三个学?而ID?003的学生ؓ王小,则这条语句就可以查出q三个h的相x?.<br /> 当然q里只是丄一个简单例?我相信实际的生应用中是存在q样的需求的,q里重要是介l这USQL语句的写?却确的说是关于like的写?即用oracle的连接符来完?<br />     ?前面两个引号的作用是生成一个引?||是字W串q接W?用来q接<span style="color: #0000ff">SELECT</span><span style="color: #000000"> username </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> student st </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> st.stud_id</span><span style="color: #808080">=</span><span style="color: #ff0000">1003</span><span style="color: #ff0000">' 语句查询得到的字W串,后面的||是用来连??最后得到的语句大至? <br /> like 'aaa%' 的Ş?卛_现key关键字动态变化的模糊查询.</span> <img src ="http://www.tkk7.com/henry1451/aggbug/204864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/henry1451/" target="_blank">henry1451</a> 2008-05-31 17:18 <a href="http://www.tkk7.com/henry1451/articles/204864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle中实现表ID自动增长http://www.tkk7.com/henry1451/articles/204711.htmlhenry1451henry1451Sat, 31 May 2008 08:19:00 GMThttp://www.tkk7.com/henry1451/articles/204711.htmlhttp://www.tkk7.com/henry1451/comments/204711.htmlhttp://www.tkk7.com/henry1451/articles/204711.html#Feedback0http://www.tkk7.com/henry1451/comments/commentRss/204711.htmlhttp://www.tkk7.com/henry1451/services/trackbacks/204711.html     mysql{其他数据库中有随着记录的插入而表ID自动增长的功??font style="background-color: #c4ecc9">oracle
却没有这L功能,但我们可以用序列和触发器来实现这L功能.

一)建立序列:
create sequence SMSLOG_SEQ
minvalue 
1
maxvalue 
999999999999999999
start 
with 601
increment 
by 1
cache 
20;
?建立触发?
CREATE OR REPLACE TRIGGER "smslog_trig"
  BEFORE 
INSERT ON smslog
  REFERENCING OLD 
AS OLD NEW AS NEW FOR EACH ROW 
DECLARE
BEGIN
  
SELECT smslog_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
END smslog_trig;
?建立?
create table SMSLOG
(
  ID       
NUMBER not null,
  USERID   
NUMBER,
  USERNAME 
VARCHAR2(200),
  DEPTID   
NUMBER
)

q样在执? insert into smslog(userid,username,deptid) values('001','aaa','1001');时将会自动给ID自动赋?,每插入一条记?ID的g增加1.

?以上序列,触发器等在PL/SQL工具中徏立很Ҏ,但如果是在命令行中创?则语句最后要?/",x行的意?而不?;",
如创发器,命o?
CREATE OR REPLACE TRIGGER "smslog_trig"
  BEFORE 
INSERT ON smslog
  REFERENCING OLD 
AS OLD NEW AS NEW FOR EACH ROW 
DECLARE
BEGIN
  
SELECT smslog_seq.NEXTVAL INTO :NEW.ID FROM DUAL;
END smslog_trig;
/


henry1451 2008-05-31 16:19 发表评论
]]>数据库查询的优化——烦引用的注意??http://www.tkk7.com/henry1451/articles/203224.htmlhenry1451henry1451Tue, 27 May 2008 06:57:00 GMThttp://www.tkk7.com/henry1451/articles/203224.htmlhttp://www.tkk7.com/henry1451/comments/203224.htmlhttp://www.tkk7.com/henry1451/articles/203224.html#Feedback0http://www.tkk7.com/henry1451/comments/commentRss/203224.htmlhttp://www.tkk7.com/henry1451/services/trackbacks/203224.html

索引使用的注意点

1)      合理使用索引

索引是数据库中重要的数据l构Q它的根本目的就是ؓ了提高查询效率。现在大多数的数据库产品都采?/span> IBM 最先提出的 ISAM 索引l构。烦引的使用要恰到好处,其用原则如下:

●在l常q行q接Q但是没有指定ؓ外键的列上徏立烦引,而不l常q接的字D则׃化器自动生成索引?/span>

●在频繁q行排序或分l(卌?/span> group by ?/span> order by 操作Q的列上建立索引?/span>

●在条g表达式中l常用到的不同D多的列上建立索,在不同值少的列上不要徏立烦引。比如在雇员表的“性别”列上只有“?#8221;?#8220;?#8221;两个不同|因此无必要建立索引。如果徏立烦引不但不会提高查询效率,反而会严重降低更新速度?/span>

●如果待排序的列有多个,可以在这些列上徏立复合烦引( compound index Q?/span>

●用系l工兗如 Informix 数据库有一?/span> tbcheck 工具Q可以在可疑的烦引上q行查。在一些数据库服务器上Q烦引可能失效或者因为频J操作而得读取效率降低,如果一个用烦引的查询不明不白地慢下来Q可以试着?/span> tbcheck 工具查烦引的完整性,必要时进行修复。另外,当数据库表更新大量数据后Q删除ƈ重徏索引可以提高查询速度?/span>

2)      避免或简化排?/span>

应当化或避免对大型表q行重复的排序。当能够利用索引自动以适当的次序生输出时Q优化器避免了排序的步骤。以下是一些媄响因素:

●烦引中不包括一个或几个待排序的列;

?/span> group by ?/span> order by 子句中列的次序与索引的次序不一P

●排序的列来自不同的表?/span>

Z避免不必要的排序Q就要正地增徏索引Q合理地合ƈ数据库表Q尽有时可能媄响表的规范化Q但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图化它Q如~小排序的列的范围等?/span>

3)      消除对大型表行数据的序存取

在嵌套查询中Q对表的序存取Ҏ询效率可能生致命的影响。比如采用顺序存取策略,一个嵌?/span> 3 层的查询Q如果每层都查询 1000 行,那么q个查询p查询 10 亿行数据。避免这U情늚主要Ҏ是对连接的列进行烦引。例如,两个表:学生表(学号、姓名、年?#8230;…Q和选课表(学号、课E号、成l)。如果两个表要做q接Q就要在“学号”q个q接字段上徏立烦引?/span>

q可以用ƈ集来避免序存取。尽在所有的查列上都有烦引,但某些Ş式的 where 子句优化器用顺序存取。下面的查询强q对 orders 表执行顺序操作:

SELECT Q?/span> FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008

虽然?/span> customer_num ?/span> order_num 上徏有烦引,但是在上面的语句中优化器q是使用序存取路径扫描整个表。因个语句要索的是分ȝ行的集合Q所以应该改为如下语句:

SELECT Q?/span> FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT Q?/span> FROM orders WHERE order_num=1008

q样p利用索引路径处理查询?/span>

4)      避免相关子查?/span>

一个列的标{֐时在L询和 where 子句中的查询中出玎ͼ那么很可能当L询中的列值改变之后,子查询必重新查询一ơ。查询嵌套层ơ越多,效率低Q因此应当尽量避免子查询。如果子查询不可避免Q那么要在子查询中过滤掉可能多的行?/span>

5)      避免困难的正规表辑ּ

MATCHES ?/span> LIKE 关键字支持通配W匹配,技术上叫正规表辑ּ。但q种匚w特别耗费旉。例如: SELECT Q?/span> FROM customer WHERE zipcode LIKE 98_ _ _

即?/span> zipcode 字段上徏立了索引Q在q种情况下也q是采用序扫描的方式。如果把语句改ؓ SELECT Q?/span> FROM customer WHERE zipcode > 98000 ”Q在执行查询时就会利用烦引来查询Q显然会大大提高速度?/span>

另外Q还要避免非开始的子串。例如语句: SELECT Q?/span> FROM customer WHERE zipcode[2 Q?/span> 3] > 80 ”Q在 where 子句中采用了非开始子Ԍ因而这个语句也不会使用索引?/span>

6)      使用临时表加速查?/span>

把表的一个子集进行排序ƈ创徏临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如:

SELECT cust.name Q?/span> rcvbles.balance Q?#8230;… other columns

FROM cust Q?/span> rcvbles

WHERE cust.customer_id = rcvlbes.customer_id

AND rcvblls.balance>0

AND cust.postcode>“98000”

ORDER BY cust.name

如果q个查询要被执行多次而不止一ơ,可以把所有未付款的客h出来攑֜一个时文件中Qƈ按客L名字q行排序Q?/span>

SELECT cust.name Q?/span> rcvbles.balance Q?#8230;… other columns

FROM cust Q?/span> rcvbles

WHERE cust.customer_id = rcvlbes.customer_id

AND rcvblls.balance>0

ORDER BY cust.name

INTO TEMP cust_with_balance

然后以下面的方式在时表中查询:

SELECT Q?/span> FROM cust_with_balance

WHERE postcode>“98000”

临时表中的行要比主表中的行少Q而且物理序是所要求的顺序,减少了磁?/span> I/O Q所以查询工作量可以得到大幅减少?/span>

注意Q时表创徏后不会反映主表的修改。在主表中数据频J修改的情况下,注意不要丢失数据?/span>

7)      用排序来取代非顺序存?/span>

非顺序磁盘存取是最慢的操作Q表现在盘存取臂的来回Ud?/span> SQL 语句隐藏了这一情况Q得我们在写应用程序时很容易写求存取大量非序늚查询?/span>

有些时候,用数据库的排序能力来替代非顺序的存取能改q查询?/font>

 

优化SQL语句

 

优化是选择最有效的方法来执行 SQL 语句?/span> Oracle 优化器选择它认为最有效的方法来执行 SQL 语句?/span>  

1)      IS NULL ?/span> IS NOT NULL

如果某列存在 NULL |即对该列徏立烦引也不会提高性能?/span>

2)      Z同的工作~写不同的SQL语句块?/span>

为完成不同的工作~写一大块 SQL E序不是好方法。它往往D每个d的结果不?/span>

化。若?/span> SQL 完成不同的工作,一般应~写不同的语句块比编写一个要好?/span>

3)      IN 和EXISTS

Select name from employee where name not in (select name from student);

Select name from employee where not exists (select name from student);

W一?/span> SQL 语句的执行效率不如第二句?/span>

通过使用 EXISTS Q?/span> Oracle 会首先检查主查询Q然后运行子查询直到它找到第一个匹?/span>

,q就节省了时间?/span> Oracle 在执?/span> IN 子查询时Q首先执行子查询Qƈ获得的l果

列表存放在一个加了烦引的临时表中。在执行子查询之前,pȝ先将L询挂P?/font>

子查询执行完毕,存放在时表中以后再执行L询。这也就是?/span> EXISTS 比?/span> IN

通常查询速度快的原因?/font>

4)      NOT q算W?/span>

Select * from employee where salary<>1000;

Select * from employee where salary<1000 or salary>1000;

W一?/span> SQL 语句的执行效率不如第二句Q因为第二句 SQL 语句可以使用索引?/span>

5)      Order By 语句

Order By 语句的执行效率很低,因ؓ它要排序。应避免?/span> Order By 字句中用表辑ּ?/span>

6)      列的q接

select * from employee where name||department=’ZYZBIOINFO’;

select * from employee where name=’ZYZ’ and department=’BIOINFO’;

q两个查询,W二句比W一句会快,因ؓ对于有连接运符’ || ’的查?/span> ,Oracle 优化器是?/span>

会用烦引的?/font>

7)      通配W?#8216;Q?#8217;当通配W出现在搜烦词首ӞOracle优化器不使用索引?/span>

Select * from employee where name like ‘%Z%’;

Select * from employee where name like ‘Z%’;

W二句的执行效率会比W一句快Q但查询l果集可能会不同?/font>

8)      应尽量避免؜合类型的表达式?/span>

假设字段 studentno ?/span> VARCHAR2 cd

有语?/span> select * from student where studentno>123;

?/span> Oracle 会有一个隐含的cd转换。隐含的cd转换可能会 Oracle 优化器忽略烦引?/span>

q时应用显式的cd转换 select * from student where studentno=to_char(123) ?/span>

9)      DISTINCT

   DISTINCT L建立一个排序,所以查询速度也慢?/span>

henry1451 2008-05-27 14:57 发表评论
]]>
oracle单基本操?/title><link>http://www.tkk7.com/henry1451/articles/201238.html</link><dc:creator>henry1451</dc:creator><author>henry1451</author><pubDate>Sun, 18 May 2008 07:16:00 GMT</pubDate><guid>http://www.tkk7.com/henry1451/articles/201238.html</guid><wfw:comment>http://www.tkk7.com/henry1451/comments/201238.html</wfw:comment><comments>http://www.tkk7.com/henry1451/articles/201238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/henry1451/comments/commentRss/201238.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/henry1451/services/trackbacks/201238.html</trackback:ping><description><![CDATA[<br /> 以下记录了一些oracler 操作相关(?nbsp;用户名:fzsi;密码Qfzsi;q接Ԍsi Z) <br /> <br /> 1.导出所有表Qexp fzsi/fzsi@si file=路径?nbsp;file=目标文g.dmp <br />   导出单个表:exp fzsi/fzsi@si tables=表名1Q表?Q?#8230;…  file=?nbsp; 径名 file=目标文g.dmp(dos下命? <br /> <br /> 2.查用Pselect * from all_users,查表Qselect * from tab; <br /> <br /> 3.建立新用Pcreate user fzsi(用户? identified by fzsi(密码) default   tablespace users temporary tablespace temp; <br /> <br /> 4.l用戯权限Qgrant connect,resource to fzsi(用户?;(q接权限) <br />                                grant dba to fzsi(用户?Q?最高权? <br /> <br /> 5.导入表:imp fzsi/fzsi fromuser=fzsi touser=fzsi file=备䆾文g.dmp;(dos下命? <br /> <br /> 6.删用Pdrop user fzsi cascade; <br /> <br /> 7.查表内容Qselect * from 表名Q?<br />   查表中数据个敎ͼselect count(*) from 表名Q?<br /> <br /> 8.查看表名Qselect * from tab; <br /> <br /> 9.修改hosnumgrade(表名)中数据:update hosnumgrade set akb020 = 'fz0102',akb021 = '抚州市第二医?Qaka=改动后的~号Qzkc=改动后的~号; <br />   提交Qcommit <br /> <br /> 10.当前命o行可在文本文件中~辑后再放进来:edit; <br /> <br /> 11.q接表:connce fzsi/fzsi; <br /> <br /> 12.查找表的列名Q?br />      1)select   column_name   from   dba_tab_columns   where   table_name='你的大写表名'; <br />            dba_tab_columns      <br />      2)select   column_name   from   user_tab_columns   where   table_name='AUCLOT'; <br />             user_tab_columns    表里的是本用L?br />      3)select column_name from all_tab_columns where table_name='A'; <br />             all_tab_columns    表里的是所有你可以讉K的表<br /> 13.查表I间中表和表?br />        <font face="verdana, arial, helvetica" size="2"><span id="gqkagyq" class="javascript" id="text1312501" style="font-size: 12px">SELECT TABLE_NAME FROM DBA_TABLES WHERE TABLESPACE_NAME='EXAMPLES'</span></font>     <br /> <br /> <p><font face="verdana, arial, helvetica" size="2"><span id="ioeoooq" class="javascript" id="text1106979">查看本用户下的各U对象的SQL脚本<br /> 表:<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> <strong style="color: black; background-color: #99ff99">cat</strong>;<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> tab;<br />   <strong style="color: black; background-color: #ffff66">select</strong> table_name <strong style="color: black; background-color: #a0ffff">from</strong> user_tables;<br /> 视图Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> text <strong style="color: black; background-color: #a0ffff">from</strong> user_views where view_name=upper('&view_name');<br /> 索引Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> index_name,table_owner,table_name,tablespace_name,status <strong style="color: black; background-color: #a0ffff">from</strong> user_indexes order by table_name; <br /> 触发器:<br />   <strong style="color: black; background-color: #ffff66">select</strong> trigger_name,trigger_type,table_owner,table_name,status <strong style="color: black; background-color: #a0ffff">from</strong> user_triggers;<br /> 快照Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> owner,name,master,table_name,last_refresh,next <strong style="color: black; background-color: #a0ffff">from</strong> user_snapshots order by owner,next;<br /> 同义词:<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> syn;<br /> 序列Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> seq;<br /> 数据库链路:<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> user_db_links;<br /> U束限制Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS <strong style="color: black; background-color: #a0ffff">from</strong> user_constraints;<br /> 本用戯取其他用户对象的权限Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> user_tab_privs;<br /> 本用h拥有的系l权限:<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> user_sys_privs;<br /> 用户Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> all_users order by user_id;<br /> 表空间剩余自q间情况:<br />   <strong style="color: black; background-color: #ffff66">select</strong> tablespace_name,sum(bytes) d节数,max(bytes),count(*) <strong style="color: black; background-color: #a0ffff">from</strong> dba_free_space group by tablespace_nameQ?br /> 数据字典Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> table_name <strong style="color: black; background-color: #a0ffff">from</strong> dict order by table_name;<br /> 锁及资源信息Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> v$lock;不包括DDL?br /> 数据库字W集Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> name,value$ <strong style="color: black; background-color: #a0ffff">from</strong> props$ where name='NLS_CHARACTERSET';<br /> inin.ora参数Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> name,value <strong style="color: black; background-color: #a0ffff">from</strong> v$parameter order by name;<br /> SQL׃n池:<br />   <strong style="color: black; background-color: #ffff66">select</strong> sql_text <strong style="color: black; background-color: #a0ffff">from</strong> v$sqlarea;<br /> 数据库:<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> v$database<br /> 控制文gQ?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> V$controlfile;<br /> 重做日志文g信息Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> V$logfile;<br /> 来自控制文g中的日志文g信息Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> V$log;<br /> 来自控制文g中的数据文g信息Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> V$datafile;<br /> NLS参数当前|<br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> V$nls_parameters;<br /> ORACLE版本信息Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> v$version;<br /> 描述后台q程Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> v$bgprocess;<br /> 查看版本信息Q?br />   <strong style="color: black; background-color: #ffff66">select</strong> * <strong style="color: black; background-color: #a0ffff">from</strong> product_component_version;<br /> 查看实例,所在主机名:<br />      <font style="background-color: #c4ecc9">select instance_name,host_name from v$instance;</font></span></font></p> <img src ="http://www.tkk7.com/henry1451/aggbug/201238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/henry1451/" target="_blank">henry1451</a> 2008-05-18 15:16 <a href="http://www.tkk7.com/henry1451/articles/201238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://9xav.com" target="_blank">޾Ʒ</a>| <a href="http://shmtweld.com" target="_blank">ŵ</a>| <a href="http://xuanzhicity.com" target="_blank">100018Ƶ </a>| <a href="http://maiertejx.com" target="_blank">Ļ޾Ʒ</a>| <a href="http://bbyy7.com" target="_blank">ƵƬ߹ۿ</a>| <a href="http://zgjzysfc.com" target="_blank">޹պƵۿ</a>| <a href="http://yg36.com" target="_blank">ŷAۺһ</a>| <a href="http://www-070755.com" target="_blank">߹ۿƵ</a>| <a href="http://www12kvkv.com" target="_blank"> ŷ</a>| <a href="http://jkc178.com" target="_blank">þþŷղũ</a>| <a href="http://6609929.com" target="_blank">ҹɫƵվ</a>| <a href="http://0551dfcy.com" target="_blank">ɫҳѹۿ</a>| <a href="http://wwby66636.com" target="_blank">¶ۺ</a>| <a href="http://bjsunic.com" target="_blank">ӰԺ޹һҳ</a>| <a href="http://am3736.com" target="_blank">Ƶ˻վƵ</a>| <a href="http://alankell.com" target="_blank">һѾƷƵ</a>| <a href="http://15nw.com" target="_blank">þþƷAV</a>| <a href="http://777mecom.com" target="_blank">պһ234</a>| <a href="http://78555yy.com" target="_blank">ӽ18վ</a>| <a href="http://123470c.com" target="_blank">þһҰ</a>| <a href="http://xj47777.com" target="_blank">Ʒۺ</a>| <a href="http://milbolg.com" target="_blank">޳avƬ</a>| <a href="http://wdjiuye.com" target="_blank">պ</a>| <a href="http://128313.com" target="_blank">һ</a>| <a href="http://9981tv.com" target="_blank">99ƵֻоƷ</a>| <a href="http://by11gun.com" target="_blank">ԻȫƵѿ</a>| <a href="http://88109a.com" target="_blank">߹ۿձһ</a>| <a href="http://saob19.com" target="_blank">޹Ʒһ</a>| <a href="http://vinsotec.com" target="_blank">AV˾þԭ</a>| <a href="http://boyonet.com" target="_blank">ëɫëƬѹۿ</a>| <a href="http://26uuyy.com" target="_blank">ĻmvѸƵ8</a>| <a href="http://taobaohuopin.com" target="_blank">ҳַȫѹۿ12վ</a>| <a href="http://abc17171.com" target="_blank">ۺƵ߹ۿ</a>| <a href="http://phlinhng.com" target="_blank">޾ƷҹҹҹŮ</a>| <a href="http://haoda8.com" target="_blank">޵һӰԺ</a>| <a href="http://my637.com" target="_blank">ҹһëƬ</a>| <a href="http://0330196.com" target="_blank">Ʒվa</a>| <a href="http://www676617.com" target="_blank">ҰһƵ</a>| <a href="http://0515bh.com" target="_blank">һձaѲ</a>| <a href="http://beijinzhongliuyiyuan.com" target="_blank">޾ƷŮþþþþþ</a>| <a href="http://yjjinfeng.com" target="_blank">޾Ʒ˳߹ۿ鶹 </a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>