日期:2014-05-16  浏览次数:20538 次

数据库 索引之二
创建表
create table test 
(
  c_id varchar2(40) default SYS_GUID(),
  c_name varchar2(40), --1
  c_cid varchar2(40),
  c_password varchar2(40), --2
  c_sex varchar2(40), --3
  c_address varchar2(40), --4
  c_truename varchar2(40), --5
  c_company varchar2(40), --6
  c_email varchar2(40), --7
  c_field1 varchar2(40), --8
  c_field2 varchar2(40), --9
  c_field3 varchar2(40), --10
  C_CRT_CDE varchar2(40),--11
  C_CRT_DATE date default sysdate, --12
  C_UPD_CDE varchar2(40), --13
  C_UPD_DATE date default sysdate, --14
  c_del varchar2(1) default '0'--15 
)

创建存储过程
create or replace procedure p_tb_test
(
  total in integer,
  cname in varchar2, --1
  ccid in varchar2,
  cpassword in varchar2,--2
  csex in varchar2,
  caddress in varchar2,
  ctruename in varchar2, --5
  ccompany in varchar2, --6
  cemail in varchar2, --7
  cfield1 in varchar2, --8
  cfield2 in varchar2, --9
  cfield3 in varchar2, --10
  CCRT_CDE in varchar2,--11
  CUPD_CDE in varchar2 --13
) AS
uuid number := 1;
begin
loop
  insert into test
    (c_name,
     c_cid,
     c_password,
     c_sex,
     c_address,
     c_truename,
     c_company,
     c_email,
     c_field1,
     c_field2,
     c_field3,
     C_CRT_CDE,
     C_UPD_CDE
     )
  values
    (cname||uuid,
     ccid||uuid,
     cpassword,
     csex,
     caddress,
     ctruename,
     ccompany,
     cemail,
     cfield1,
     cfield2,
     cfield3,
     CCRT_CDE,
     CUPD_CDE
    );
  --commit;
  uuid := uuid + 1;
  exit when uuid >= total;
end loop;
end;


call(); -- 调用







影响项目性能的很大因素在于SQL的写法,当然这得建立在表结构都设计得非常的好的基础上,设计我没有什么经验就先不谈了。高质量高效能的SQL会给项目带来高性能,也会给人带来身心上的愉悦,不会因为项目性能问题辗转反侧抓破头皮。数据库方面的技术也有很多。然而现在项目中涉及到的无非就是对数据库的CRUD操作,当然对于CUD都有很好的解决方案,最明显最有效的的一个解决方案就是批处理,当然采用批处理得符合一定的条件,否则达不到想要的效果,有关批处理的知识,我的另外一篇文章有所介绍,在这里就不一一细说了。回到主题上,SQL查询优化,这里只对CRUD中的R进行详述,我借鉴网上的资料然后通过实验去验证别人的说法以达到提高自己技能的目的。

要想测试验证别人的说法,得构造一个环境,数据量少说也得上百万才能看出效果。

A(C_A1,C_A2,C_A3,C_A4,C_A5,C_A6,C_CRT,C_CRT_DATE,C_UP,C_UP_DATE,C_DEL)

C(C1,A1,B1,C2,C3,C4,C5,C6,C7,C8,C9)

2 见证查询优化时刻

有时候一个表中的数据量很大时候,索引是非常非常的重要,何为索引?我来举个例子,你一听就能明白,比如:你想搜索我的电脑中一个名字为
FILE.TXT 文件,如果不知道该文件所在的目录(没有创建索引)情况下,基本上要扫描我的电脑中的所有盘符里的文件,如果你的硬盘中的有很多文件(相当一个表中有很多的数据),基本上是一个全盘扫描的过程,这时如果你告诉搜索,你的文件就在D盘的TEST目录下,这样来搜索速度将会大大的提高,给文件定位就相当一个索引。

    select * from A where R1 =1 and R3 =3 and R4;
按道理它走的索引是IDX_R3,有时候默认走的索引并不是你想象中的那样,特别是多表关联的情况下。所以我们进行指定一下索引,按我们真正想要的走的索引
   select /*+ index(R1,IDX_R3) */* from A where R1 =1 and R3 =3 and R4;
使用查询处理器执行SQL语句,在一个表上,一次只能使用一个索引


索引?给一个列建索引和给多个列建一个索引,数据库怎么处理的?

建一个索引性能区别?

注意指定走哪条索引的写法?[/size]