CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  SQL Anywhere Studio

有关oracle性能(索引)问题,急!!

楼主ziyouzhuangtai(自由状态)2001-11-12 11:17:55 在 其他数据库开发 / SQL Anywhere Studio 提问

我连接两个表时总是有一个表的索引没用上(用plan_table分析),两个表中的连接字段的索引我都重建过了,两个表我也重新分析过了(analyze     。。。       compute   statistics),请教一下我想使两个索引都用上,我该怎么办? 问题点数:23、回复次数:41Top

1 楼9Thoughts(一片绿洲)回复于 2001-11-12 11:22:08 得分 0

能不能把你的字段和索引说得更详细些?Top

2 楼Haiwer(海阔天空)回复于 2001-11-12 12:03:53 得分 0

在连接的时候,一般用上一个表的索引就够了,因为你的查询往往总有一个表是要用其他字段来确定连接的字段的,那样这个表就不必使用连接的字段的索引了。  
   
  很难表达,也许言不达意!Top

3 楼Haiwer(海阔天空)回复于 2001-11-12 12:07:18 得分 0

总的意思:不必钻牛角尖要求两个索引都用到,关键看查询速度!Top

4 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 12:10:33 得分 0

一个是用户表(customer),他的索引字段是cust_id(且是主键,索引名称是pk_customer),另一个是信息表(infomation),他的索引字段是用户表的cust_id字段(索引名是fk_cust).我用plan_table分析的语句是select   count(*)   from   customer   c,info_mation   i   where   c.cust_id=i.cust_id;Top

5 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 13:07:03 得分 0

冤枉呀!就是因为速度慢,我才找原因的,发现索引没用上呀。Top

6 楼KingSunSha(弱水三千)回复于 2001-11-12 13:16:48 得分 0

试一下用HINT吧  
  select   /*+   INDEX(information   idx_info_cust_id)   */  
                count(*)  
      from   customer   c,info_mation   i  
    where   c.cust_id=i.cust_id;    
   
   
  Top

7 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 13:58:56 得分 0

给他指定索引后也没用,他还是提示:TABLE   ACCESS   FULL   CUSTOMER   ANALYZED1,请再给点指导。Top

8 楼KingSunSha(弱水三千)回复于 2001-11-12 14:11:42 得分 0

索引名是fk_cust?   听起来不象索引的名称,倒象一个外健,这到底是索引还是CONSTRAINT?Top

9 楼Haiwer(海阔天空)回复于 2001-11-12 14:20:07 得分 0

To: KingSunSha(弱水三千)   
      很细心嘛....Top

10 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 14:26:07 得分 0

是逻辑外键,但在数据库中不是外键,确实只是个索引。Top

11 楼KingSunSha(弱水三千)回复于 2001-11-12 14:36:59 得分 0

select   /*+   INDEX(information   FK_CUST)   */  
              count(*)  
      from   customer   c,info_mation   i  
  where   c.cust_id=i.cust_id;    
  用HINTS指定INDEX而系统忽略的话,只有一种解释那就是这个INDEX不存在.  
  所以我只能认为是INDEX设置的问题.Top

12 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 17:23:31 得分 0

但他显示的是customer表的全表扫描呀Top

13 楼Haiwer(海阔天空)回复于 2001-11-12 17:29:44 得分 0

customer表记录不会很多吧,有多少?Top

14 楼Haiwer(海阔天空)回复于 2001-11-12 17:34:24 得分 0

select   count(*)  
      from   customer   c,info_mation   i  
  where   c.cust_id=i.cust_id;    
   
  应该是有一个表要做全表扫描(记录少的表),才能计算出count(*)  
  如果customer   、info_mation两表有外键关系,可以把语句改成  
  select   count(*)   from   info_mation  
  这样会快些。  
   
   
   
   
   
  Top

15 楼KingSunSha(弱水三千)回复于 2001-11-12 17:35:29 得分 0

你能不能把INDEX   DROP掉重建?   同时换一个名字  
  我还是认为你的INDEX有问题Top

16 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 17:36:29 得分 0

customer和infomation表都有60几万条数据,Top

17 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 17:53:42 得分 0

影响两个表的连接速度的主要有哪些因素,该如何调整啊,现在两个表都有60几万的数据,查询速度跟蜗牛似的,急死我了。Top

18 楼KingSunSha(弱水三千)回复于 2001-11-12 17:57:40 得分 0

我搞错了,原来对是CUSTOMER表做全表扫描  
  那你改一下HINTS看看强制索引能不能用上  
  CUSTOMER  
  select   /*+   INDEX(CUSTOMER   pk_customer)   */  
              count(*)  
      from   customer   c,info_mation   i  
  where   c.cust_id=i.cust_id;    
  Top

19 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 18:03:59 得分 0

是不是计算count(*)一定要扫描其中的一个表呀,我把customer表的主键重建了以后,他现在对information表进行全表扫描了,但速度还是很慢,我该怎么办呀?Top

20 楼KingSunSha(弱水三千)回复于 2001-11-12 18:05:58 得分 0

实在不行你把两个表的DLL都贴上来(包括INDEX),我在家里测试一下.   我就不信做不到Top

21 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 18:25:15 得分 0

多谢了,弱水三千!现在我在where条件里加了个条件,发现两个索引都能用了,显示如下:  
  SELECT   STATEMENT       CHOOSECost   =   584  
      SORT   AGGREGATE     1  
          NESTED   LOOPS       1  
              TABLE   ACCESS   BY   INDEX   ROWID   CUSTOMER   ANALYZED1  
                  INDEX   RANGE   SCAN   infomation_IX16(所加条件字段的索引名)   1  
              INDEX   RANGE   SCAN   fk_cust   2  
  但是查询速度很慢,我该怎么办呀?  
  Top

22 楼MountLion(闷头睡)回复于 2001-11-12 18:48:37 得分 0

好像count(*)是要做全表扫描的,不用想了,换个法子吧?Top

23 楼ziyouzhuangtai(自由状态)回复于 2001-11-12 19:28:51 得分 0

我是说这两个表连接以后,查询非常慢,有没有什么方法改进呀!Top

24 楼KingSunSha(弱水三千)回复于 2001-11-12 21:02:59 得分 0

我做了一下测试,结果很正常(两个表各有10万条数据)  
  CREATE   TABLE   customer  
    (  
      cust_id                                         NUMBER(10)   NOT   NULL,  
      cust_name                                     VARCHAR2(100)  
    )  
  /  
   
  ALTER   TABLE   customer  
    ADD   CONSTRAINT   pk_customer   PRIMARY   KEY   (cust_id)  
  /  
   
  CREATE   TABLE   information  
    (  
      cust_id                                         NUMBER(10),  
      info1                                             VARCHAR2(100),  
      info2                                             VARCHAR2(100)  
    )  
  /  
   
  CREATE     INDEX   idx_info_cust_id  
    ON   information  
      (   cust_id     )  
  /  
   
  begin  
  for   i   in   1..100000   loop  
      insert   into   customer  
      values   (i,'name'   ||   to_char(i));  
      insert   into   information  
      values   (i,'col1-'||   to_char(i),'col2-'||to_char(i));  
  end   loop;  
  end;  
  /  
   
  COMMIT  
  /  
   
  做完表分析以后,对以下的SQL   EXPLAIN   PLAN,  
  select   /*+index(information   idx_info_cust_id)*/  
                count(*)  
      from   customer   c,information   i  
  where   c.cust_id   =   i.cust_id;  
   
  SQL>   SELECT   LPAD('   ',2*LEVEL)||  
      2                   Operation||'   '||Options||'   '||  
      3                   decode(Object_Owner,Null,'',Object_Owner||'.'||Object_name)||'   '||  
      4                   decode(Optimizer,NULL,'',Optimizer)   Q_PLAN  
      5     FROM   plan_table  
      6     connect   by   prior   ID   =   Parent_id   and   statement_id   =   'XXX'  
      7     start   with   ID   =   0   and   statement_id   =   'XXX';  
   
  Q_PLAN  
  --------------------------------------------------------------------------------  
      SELECT   STATEMENT       CHOOSE  
          SORT   AGGREGATE  
              NESTED   LOOPS  
                  INDEX   FAST   FULL   SCAN   KNUT.IDX_INFO_CUST_ID   ANALYZED  
                  INDEX   UNIQUE   SCAN   KNUT.PK_CUSTOMER   ANALYZED  
   
   
  测试环境:ORACLE8.16+WIN2000   PROTop

25 楼ziyouzhuangtai(自由状态)回复于 2001-11-13 10:13:18 得分 0

多谢弱水三千了,但同样的步骤我的Q_PLAN如下:  
    SELECT   STATEMENT       CHOOSE  
        SORT   AGGREGATE  
            MERGE   JOIN  
                INDEX   FULL   SCAN   PK_CUSTOMER   ANALYZED  
                SORT   JOIN  
                    TABLE   ACCESS   FULL   INFOMATION   ANALYZED  
  环境是:ORACLE8.0.5   +   SOLORIAS5.8   记录条数是60多万条。  
  这是我的DDL:  
  create   table   CUSTOMER  
  (  
          SCUSTOMER_ID                         VARCHAR2(16)                       not   null,  
          SREGION_ID                             VARCHAR2(8)                         null         ,  
          NORG_NUM                                 NUMBER(10)                           null         ,  
          SCUST_IDENTIFIER                 VARCHAR2(16)                       null         ,  
          SCUST_CARD_NUM                     VARCHAR2(16)                       null         ,  
          CCUST_TYPE                             CHAR(1)                                 null         ,  
          SGOLDCARD_NUM                       VARCHAR2(24)                       null         ,  
          SGUARANTEE_ID                       VARCHAR2(8)                         null         ,  
          SAGREEMENT                             VARCHAR2(80)                       null         ,  
          CDATA_SOURCE_TYPE               CHAR(1)                                 null         ,  
          CSTATUS                                   CHAR(1)                                 null         ,  
          CRETURN_FLAG                         CHAR(1)                                 null         ,  
          SCUST_NAME                             VARCHAR2(32)                       null         ,  
          SCUST_UNIT                             VARCHAR2(64)                       null         ,  
          SUNIT_FLAG                             CHAR(1)                                 null         ,  
          SADDRESS                                 VARCHAR2(128)                     null         ,  
          SZIP_CODE                               VARCHAR2(6)                         null         ,  
          SAREA_NUM                               VARCHAR2(8)                         null         ,  
          STELEPHONE1                           VARCHAR2(32)                       null         ,  
          STELEPHONE2                           VARCHAR2(32)                       null         ,  
          STELEPHONE3                           VARCHAR2(32)                       null         ,  
          STELEPHONE4                           VARCHAR2(32)                       null         ,  
          SEMAIL                                     VARCHAR2(32)                       null         ,  
          DPURCHASE_DATE                     DATE                                       null         ,  
          DGUARANTEE_DATE                   DATE                                       null         ,  
          NPURCHASE_PRICE                   NUMBER(12,4)                       null         ,  
          SINVOICE_NUM                         VARCHAR2(16)                       null         ,  
          SSALES_UNIT_ID                     VARCHAR2(8)                         null         ,  
          SSALES_UNIT_NAME                 VARCHAR2(64)                       null         ,  
          DSERV_DATE                             DATE                                       null         ,  
          SSERV_UNIT_ID                       VARCHAR2(8)                         null         ,  
          SSERV_UNIT_NAME                   VARCHAR2(64)                       null         ,  
          SPROD_ID                                 VARCHAR2(20)                       null         ,  
          SPROD_MODEL                           VARCHAR2(64)                       null         ,  
          SPROD_BRAND                           VARCHAR2(4)                         null         ,  
          SSERIAL_NUM1                         VARCHAR2(20)                       null         ,  
          SSERIAL_NUM2                         VARCHAR2(20)                       null         ,  
          SSERIAL_NUM3                         VARCHAR2(20)                       null         ,  
          SSERIAL_NUM4                         VARCHAR2(20)                       null         ,  
          DMADE_DATE1                           DATE                                       null         ,  
          DMADE_DATE2                           DATE                                       null         ,  
          DMADE_DATE3                           DATE                                       null         ,  
          DMADE_DATE4                           DATE                                       null         ,  
          SOPERATOR_ID                         VARCHAR2(8)                         null         ,  
          TENTRY_DATETIME                   DATE                                       null         ,  
          SMODIFY_OPERATOR_ID           VARCHAR2(8)                         null         ,  
          TMODIFY_DATETIME                 DATE                                       null         ,  
          SMODIFY_REASON                     VARCHAR2(48)                       null         ,  
          SATTRIBUTE1                           VARCHAR2(16)                       null         ,  
          SATTRIBUTE2                           VARCHAR2(64)                       null         ,  
          DDATE_ATTRIBUTE1                 DATE                                       null         ,  
          NNUM_ATTRIBUTE1                   NUMBER(10,2)                       null         ,  
          SNOTE                                       VARCHAR2(48)                       null         ,  
          constraint   PK_CUSTOMER   primary   key   (SCUSTOMER_ID)  
  )  
  /  
   
  create   table   infomation  
  (  
          SSERV_RECORD_ID                   VARCHAR2(16)                       not   null,  
          SCUSTOMER_ID1                       VARCHAR2(16)                       null         ,  
          SCUSTOMER_ID2                       VARCHAR2(16)                       null         ,  
          SSERVICE_CATEGORY_ID         VARCHAR2(4)                         null         ,  
          SINFO_RECORD_ID                   VARCHAR2(16)                       null         ,  
          SRECORD_TYPE                         CHAR(1)                                 null         ,  
          SSERV_FORM_NUM                     VARCHAR2(16)                       null         ,  
          SSETTLEMENT_NUM                   VARCHAR2(16)                       null         ,  
          CCHARGE_TYPE                         CHAR(1)                                 null         ,  
          NORG_NUM                                 NUMBER(10)                           null         ,  
          TENTRY_DATETIME                   DATE                                       null         ,  
          SOPERATOR_ID                         VARCHAR2(8)                         null         ,  
          SOPERATOR_NAME                     VARCHAR2(8)                         null         ,  
          NPRINT_COUNT                         NUMBER(2)                             null         ,  
          CDATA_SOURCE_TYPE               CHAR(1)                                 null         ,  
          CSTATUS                                   CHAR(1)                                 null         ,  
          DREQUEST_DATE                       DATE                                       null         ,  
          DSERV_DATE                             DATE                                       null         ,  
          DFINISH_DATE                         DATE                                       null         ,  
          SSERV_UNIT_ID                       VARCHAR2(8)                         null         ,  
          SSERV_UNIT_NAME                   VARCHAR2(64)                       null         ,  
          SSERV_WORKER1                       VARCHAR2(8)                         null         ,  
          SSERV_WORKER2                       VARCHAR2(8)                         null         ,  
          SWORK_CARD1                           VARCHAR2(24)                       null         ,  
          SWORK_CARD2                           VARCHAR2(24)                       null         ,  
          SSERV_COUNT                           NUMBER(4)                             null         ,  
          SSERV_CODE                             VARCHAR2(4)                         null         ,  
          SRESULT_CODE                         VARCHAR2(4)                         null         ,  
          SREFLECT_ID                           VARCHAR2(8)                         null         ,  
          SREFLECT_DESC                       VARCHAR2(80)                       null         ,  
          SFAULT_ID                               VARCHAR2(8)                         null         ,  
          SFAULT_DESC                           VARCHAR2(80)                       null         ,  
          SMAINT_ID                               VARCHAR2(8)                         null         ,  
          SMAINT_DESC                           VARCHAR2(80)                       null         ,  
          SSERV_DESC1                           VARCHAR2(80)                       null         ,  
          SSERV_DESC2                           VARCHAR2(80)                       null         ,  
          SCUST_DESC1                           VARCHAR2(80)                       null         ,  
          NSERV_FEE1                             NUMBER(12,4)                       null         ,  
          NSERV_FEE2                             NUMBER(12,4)                       null         ,  
          NSERV_FEE3                             NUMBER(12,4)                       null         ,  
          NSERV_FEE4                             NUMBER(12,4)                       null         ,  
          NTOTAL_FEE                             NUMBER(12,4)                       null         ,  
          CCALLBACK_FLAGA                   CHAR(1)                                 null         ,  
          CCALLBACK_FLAGB                   CHAR(1)                                 null         ,  
          CCALLBACK_FLAGC                   CHAR(1)                                 null         ,  
          SCHECK_OPERATOR                   VARCHAR2(8)                         null         ,  
          DCHECK_DATE                           DATE                                       null         ,  
          SCHECK_RESULT_ID                 VARCHAR2(4)                         null         ,  
          SCHECK_DESC                           VARCHAR2(80)                       null         ,  
          SCHECK_OPERATOR1                 VARCHAR2(8)                         null         ,  
          SCHECK_OPERATOR2                 VARCHAR2(8)                         null         ,  
          SCHECK_OPERATOR3                 VARCHAR2(8)                         null         ,  
          DCHECK_DATE1                         DATE                                       null         ,  
          DCHECK_DATE2                         DATE                                       null         ,  
          DCHECK_DATE3                         DATE                                       null         ,  
          SCHECK_ATTRIBUTE1               VARCHAR2(8)                         null         ,  
          SCHECK_ATTRIBUTE2               VARCHAR2(8)                         null         ,  
          SCHECK_ATTRIBUTE3               VARCHAR2(8)                         null         ,  
          SATTRIBUTE1                           VARCHAR2(16)                       null         ,  
          SATTRIBUTE2                           VARCHAR2(64)                       null         ,  
          SATTRIBUTE3                           VARCHAR2(64)                       null         ,  
          DDATE_ATTRIBUTE1                 DATE                                       null         ,  
          NNUM_ATTRIBUTE1                   NUMBER(10,2)                       null         ,  
          SNOTE                                       VARCHAR2(48)                       null         ,  
          constraint   PK_INFOMATION   primary   key   (SSERV_RECORD_ID)  
  )  
  /  
  关联字段是customer表的scustomer_id和infomation表的scustomer_id,索引比较多,我没有办法把它从数据库中的创建语句取出来。如有好的方法请告知,我立刻取出并传上来,另外,我的customer表字段scustomer_id和infomation表的字段scustomer_id1、sserv_record_id的索引建在该表的表空间上,而其他索引建在index表空间上,不知是否有影响。Top

26 楼KingSunSha(弱水三千)回复于 2001-11-13 11:19:02 得分 0

我用SQL   NAVIGATOR生成DLL,很方便,你去QUEST.COM下载一个吧.  
  至于索引的表空间,你的方法是对的,大的索引应该放在单独的表空间,而不要和表放在一起,否则会影响性能.这肯定不会影响EXPLAIN   PLAN.Top

27 楼ziyouzhuangtai(自由状态)回复于 2001-11-13 15:18:45 得分 0

这是用   SQL   NAVIGATOR生成的索引dll:  
  CREATE     INDEX   cs_customer_ix1  
    ON   cs_customer  
      (   sserial_num1     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix10  
    ON   cs_customer  
      (   sguarantee_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix11  
    ON   cs_customer  
      (   scust_card_num     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix12  
    ON   cs_customer  
      (   sprod_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix13  
    ON   cs_customer  
      (   sprod_model     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_customer_ix14  
    ON   cs_customer  
      (   cdata_source_type     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_customer_ix15  
    ON   cs_customer  
      (   cstatus     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix17  
    ON   cs_customer  
      (   saddress     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix18  
    ON   cs_customer  
      (   sarea_num     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix19  
    ON   cs_customer  
      (   sserv_unit_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix2  
    ON   cs_customer  
      (   sserial_num2     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix20  
    ON   cs_customer  
      (   dserv_date     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix21  
    ON   cs_customer  
      (   dpurchase_date     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix22  
    ON   cs_customer  
      (   soperator_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix23  
    ON   cs_customer  
      (   scust_identifier     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_customer_ix24  
    ON   cs_customer  
      (   ccust_type     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix25  
    ON   cs_customer  
      (   scust_name     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix26  
    ON   cs_customer  
      (   sserv_unit_name     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix27  
    ON   cs_customer  
      (   sattribute2     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix3  
    ON   cs_customer  
      (   sserial_num3     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix4  
    ON   cs_customer  
      (   sserial_num4     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix5  
    ON   cs_customer  
      (   stelephone1     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix6  
    ON   cs_customer  
      (   stelephone2     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix7  
    ON   cs_customer  
      (   stelephone3     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_data  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix8  
    ON   cs_customer  
      (   stelephone4     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_customer_ix9  
    ON   cs_customer  
      (   semail     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_info_record_ix16  
    ON   cs_customer  
      (   sregion_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_data  
  /  
   
   
   
   
  CREATE     UNIQUE   INDEX   pk_cs_customer  
    ON   cs_customer  
      (   scustomer_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_data  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk1  
    ON   cs_infomation  
      (   sserv_form_num     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk2  
    ON   cs_infomation  
      (   sfault_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk3  
    ON   cs_infomation  
      (   smaint_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk4  
    ON   cs_infomation  
      (   sserv_unit_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk5  
    ON   cs_infomation  
      (   scustomer_id2     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk6  
    ON   cs_infomation  
      (   sreflect_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk7  
    ON   cs_infomation  
      (   scheck_result_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk8  
    ON   cs_infomation  
      (   scustomer_id1     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_data  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_fk9  
    ON   cs_infomation  
      (   sinfo_record_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_infomation_ix1  
    ON   cs_infomation  
      (   cdata_source_type     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_ix10  
    ON   cs_infomation  
      (   dserv_date     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_infomation_ix2  
    ON   cs_infomation  
      (   srecord_type     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_infomation_ix3  
    ON   cs_infomation  
      (   ccallback_flaga     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_infomation_ix4  
    ON   cs_infomation  
      (   ccallback_flagb     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_infomation_ix5  
    ON   cs_infomation  
      (   ccallback_flagc     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     BITMAP   INDEX   cs_infomation_ix6  
    ON   cs_infomation  
      (   cstatus     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_ix7  
    ON   cs_infomation  
      (   ssettlement_num     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_ix8  
    ON   cs_infomation  
      (   dfinish_date     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     INDEX   cs_infomation_ix9  
    ON   cs_infomation  
      (   tentry_datetime     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_index  
  /  
   
   
   
   
  CREATE     UNIQUE   INDEX   pk_cs_infomation  
    ON   cs_infomation  
      (   sserv_record_id     )  
      PCTFREE         10  
      INITRANS       2  
      MAXTRANS       255  
      TABLESPACE   hskt_data  
  /  
   
  请弱水三千再帮帮忙呀!  
  Top

28 楼KingSunSha(弱水三千)回复于 2001-11-13 15:27:59 得分 0

要到晚上我才能测试,请耐心等候.Top

29 楼ziyouzhuangtai(自由状态)回复于 2001-11-13 15:39:04 得分 0

多谢了!Top

30 楼Haiwer(海阔天空)回复于 2001-11-13 15:42:01 得分 1

碰到这么个热心大哥真是福气Top

31 楼ziyouzhuangtai(自由状态)回复于 2001-11-13 15:51:03 得分 0

是呀!真是非常感激呀!Top

32 楼9Thoughts(一片绿洲)回复于 2001-11-13 17:38:59 得分 1

select   count(*)   from   customer   c,info_mation   i   where   c.cust_id=i.cust_id;  
   
  在解析这个语句时,ORACLE首先要选择一个主表做为驱动表,而你有没有指定其他条件,FULL   SCAN是必然的,无法避免,但是另外一个从表则不必做FULL   SCAN。在这里驱动表应该是customer。  
  这是ORACLE的优化原则,因为这样做效率更高。  
  也正如你所言,在WHERE   clause里边再加一个条件,索引被激活了,正是你的条件影响了驱动表的选择。  
  关于这个《Oracle8i   Concept》里边有详细的描述。Top

33 楼ziyouzhuangtai(自由状态)回复于 2001-11-13 18:12:20 得分 0

谢谢一片绿洲的指点,不过现在不是索引没用上而是查询速度很慢的问题,可否再给点指点。Top

34 楼KingSunSha(弱水三千)回复于 2001-11-13 23:26:16 得分 21

终于测试完了,结果还是一样(为了加入这120万条纪录,花了我45分钟,都怪我先建立了那么多INDEX):  
  SQL>   ;  
      1     SELECT   LPAD('   ',2*LEVEL)||  
      2                   Operation||'   '||Options||'   '||  
      3                   decode(Object_Owner,Null,'',Object_Owner||'.'||Object_name)||'   '||  
      4                   decode(Optimizer,NULL,'',Optimizer)   Q_PLAN  
      5         FROM   plan_table  
      6     connect   by   prior   ID   =   Parent_id   and   statement_id   =   'AAA'  
      7*     start   with   ID   =   0   and   statement_id   =   'AAA'  
  SQL>   /  
   
  Q_PLAN  
  --------------------------------------------------------------------------------  
      SELECT   STATEMENT       CHOOSE  
          SORT   AGGREGATE  
              NESTED   LOOPS  
                  INDEX   FULL   SCAN   KNUT.CS_INFOMATION_FK8   ANALYZED  
                  INDEX   UNIQUE   SCAN   KNUT.PK_CS_CUSTOMER   ANALYZED  
   
  Elapsed:   00:00:00.40  
  SQL>   select   count(*)  
      2         from   cs_customer   c,   cs_infomation   i  
      3       where   c.scustomer_id=i.scustomer_id1;  
   
      COUNT(*)  
  ----------  
          599999  
   
  Elapsed:   00:00:010.56  
   
  EXPLAIN   PLAN用到了一个NON-UNIQUE   INDEX   FULL   SCAN(不是FULL   TABLE   SCAN)和一个UNIQUE   INDEX   FULL   SCAN。查询的速度不是很快(毕竟有那么多纪录)。  
  好像已经没有办法再优化了。  
   
  另外发现一个有趣的现象,请看:  
  SQL>   select   count(*)  
      2         from   cs_customer   c,   cs_infomation   i  
      3       where   c.scustomer_id=i.scustomer_id1  
      4           and   c.scustomer_id   =   100;     --在CUSTOMER表上加限制条件  
   
      COUNT(*)  
  ----------  
                    2  
   
  Elapsed:   00:00:05.19     --很慢  
   
      1     select   count(*)  
      2         from   cs_customer   c,   cs_infomation   i  
      3       where   c.scustomer_id=i.scustomer_id1  
      4*       and   i.scustomer_id1   =   100     ----在INFORMATION表上加限制条件  
  SQL>   /  
   
      COUNT(*)  
  ----------  
                    2  
   
  Elapsed:   00:00:00.11     --非常快  
   
  但是用EXPLAIN   PLAN分析,结果是一模一样的。WHY??????????Top

35 楼ziyouzhuangtai(自由状态)回复于 2001-11-14 10:04:57 得分 0

真不知怎么谢你了,弱水三千,耽误你那么多时间,真是非常感激!  
  看来从索引是没有办法了,关于数据库参数的调整,可不可以给点建议,让这样的连接速度能快点,这么慢的速度实在受不了(1分40秒)。  
  Top

36 楼KingSunSha(弱水三千)回复于 2001-11-14 15:00:30 得分 0

太可怕了,1分40秒?在我的pc上只要10秒以内  
  我用的机器也是很一般的(AMD   DURON   850/512MB   RAM/40G   HDD),根本不能和专用的服务器比的。而且数据库我也没有做太多的优化,基本参数设置如下:  
  db_block_buffers   =   31587  
  shared_pool_size   =   43127808  
  large_pool_size   =   614400  
  db_block_size   =   8192  
  sort_area_size   =   65536  
  sort_area_retained_size   =   65536  
   
  我个人感觉db_block_size对数据库性能影响比较大,设成2k的话,速度很慢,4k就比2k快1倍都多,8k比4k又能提高50%左右。Top

37 楼ziyouzhuangtai(自由状态)回复于 2001-11-15 09:59:19 得分 0

但db_block_size的设置是否只能在数据库创建的时候有效呀?Top

38 楼ziyouzhuangtai(自由状态)回复于 2001-11-15 10:01:10 得分 0

但db_block_size的设置是否只能在数据库创建的时候才可以修改呀?Top

39 楼KingSunSha(弱水三千)回复于 2001-11-15 10:45:03 得分 23

是的,DB_BLOCK_SIZE在创建数据库的时候指定,没办法修改.  
  我帮人做过几次优化,解决的办法是先倒出全部数据,用新的参数重建数据库,然后在倒入数据.Top

40 楼ziyouzhuangtai(自由状态)回复于 2001-11-15 12:47:36 得分 0

但现实是不允许这样做呀。我好惨哪,谢谢各位的帮助了!Top

41 楼Dump(当铺)回复于 2001-11-20 12:35:06 得分 0

我们从来不对大表进行关联,宁可增加冗余字段。  
  Top

相关问题

  • 有关Oracle中簇与索引关系的问题!
  • 关于索引的性能问题
  • 有关视图的索引
  • 请问ORACLE你如何创建索引
  • oracle 8.1.7 如何创建全文索引??
  • oracle更新的性能
  • 有关建立索引的困惑
  • 索引如何提高数据库整体性能?
  • 有关审计(oracle)
  • 有关Oracle的case

关键词

  • 字段
  • 数据库
  • 查询
  • 连接
  • 性能
  • 索引
  • scustomer
  • cust
  • 表
  • customer

得分解答快速导航

  • 帖主:ziyouzhuangtai
  • Haiwer
  • 9Thoughts
  • KingSunSha
  • KingSunSha

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo