zoukankan      html  css  js  c++  java
  • SQL优化 1

    SQL_ID:fvdwtfv18yy0m

    先看看sql的预估执行计划
    select * from table(dbms_xplan.display_awr('fvdwtfv18yy0m'));
    
    sql问题如下
    SELECT cu.ecno,
    	cu.NAME,
    	cu.birthday,
    	cu.sex,
    	cu_id.idtype,
    	cu_id.idcard,
    	reg.username
    FROM customer cu,
    	customerid cu_id,
    	customerreg reg
    WHERE cu.ecno = cu_id.ecno
    	AND cu.ecno = reg.ecno
    	AND upper(reg.username) = upper('13979083223@139.com');
    	
    看看表上面有没有索引
    SELECT INDEX_NAME FROM  DBA_INDEXES WHERE TABLE_NAME ='CUSTOMERREG';
    
    切换一下session的用户,当不知道某用户名密码的时候,可以设置session的current_schema
    alter session set current_schema=ESERVICE;
    

    查看数据表的创建语句

    CREATE TABLE "ESERVICE"."CUSTOMERREG"
       (    "ECNO" VARCHAR2(32) NOT NULL ENABLE,
            "USERNAME" VARCHAR2(50),
            "USERPASSWORD" VARCHAR2(50),
            "CRANECARD" VARCHAR2(30),
            "CREATEDATE" DATE,
            "LOGONCOUNT" NUMBER(10,0),
            "LASTLOGONDATE" DATE,
            "ISUSE" VARCHAR2(1),
            "CUSTOMERREG_LDAP_FLAG" VARCHAR2(10),
            "RANDOMNO" VARCHAR2(20),
            "LASTSENDMAILDATE" VARCHAR2(20),
            "DAYLOGINCOUNT" VARCHAR2(1),
            "DAYLOGINDATE" VARCHAR2(14),
             PRIMARY KEY ("ECNO")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
      STORAGE(INITIAL 19922944 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "ESERVICE"  ENABLE,
             CONSTRAINT "USERNAME" UNIQUE ("USERNAME")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
      STORAGE(INITIAL 29360128 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "ESERVICE"  ENABLE
       ) SEGMENT CREATION IMMEDIATE
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 75497472 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "ESERVICE"
    

    select name,DATATYPE_STRING,VALUE_STRING from v$sql_bind_capture where sql_id='fvdwtfv18yy0m';

    -----------------------------------------------------------------------------------
    | Id  | Operation           | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT    |             | 15626 |  1449K| 12213   (1)| 00:02:27 |
    |*  1 |  HASH JOIN          |             | 15626 |  1449K| 12213   (1)| 00:02:27 |
    |*  2 |   HASH JOIN         |             | 15594 |   974K|  9806   (1)| 00:01:58 |
    |*  3 |    TABLE ACCESS FULL| CUSTOMERREG | 15594 |   517K|  5635   (1)| 00:01:08 |
    |   4 |    TABLE ACCESS FULL| CUSTOMER    |  1489K|    42M|  4167   (1)| 00:00:51 |
    |   5 |   TABLE ACCESS FULL | CUSTOMERID  |  1501K|    44M|  2402   (1)| 00:00:29 |
    -----------------------------------------------------------------------------------
    

    SELECT TABLE_NAME,COLUMN_NAME,INDEX_NAME FROM DBA_IND_COLUMNS WHERE TABLE_NAME IN ('CUSTOMER','CUSTOMERID','CUSTOMERREG');

    TABLE_NAME                     COLUMN_NAME                    INDEX_NAME
    ------------------------------ ------------------------------ ------------------------------
    CUSTOMER                       MOBILE                         IND_CUSTOMER
    CUSTOMER                       ECNO                           SYS_C0015620
    CUSTOMERID                     ECNO                           IDX_CUS_ID
    CUSTOMERREG                    USERNAME                       USERNAME
    CUSTOMERREG                    ECNO                           SYS_C0015621
    

    IDX_CUS_ID表空间是USERS

    create index eservice.ind_CUSTOMERREG_upperusername on eservice.CUSTOMERREG(upper('USERNAME')) tablespace EBDBINDEX;

    ---------------------------------------------------------------------------------------
    | Id  | Operation              | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT       |              | 15626 |   976K| 11775   (1)| 00:02:22 |
    |*  1 |  HASH JOIN             |              | 15626 |   976K| 11775   (1)| 00:02:22 |
    |*  2 |   HASH JOIN            |              | 15594 |   746K|  9370   (1)| 00:01:53 |
    |*  3 |    TABLE ACCESS FULL   | CUSTOMERREG  | 15594 |   517K|  5635   (1)| 00:01:08 |
    |   4 |    INDEX FAST FULL SCAN| SYS_C0015620 |  1489K|    21M|  3732   (1)| 00:00:45 |
    |   5 |   TABLE ACCESS FULL    | CUSTOMERID   |  1501K|    21M|  2401   (1)| 00:00:29 |
    ---------------------------------------------------------------------------------------
    
    SELECT 1
    FROM customer cu,
    	customerid cu_id,
    	customerreg reg
    WHERE cu.ecno = cu_id.ecno
    	AND cu.ecno = reg.ecno
    	AND upper(reg.username) = upper('13979083223@139.com');
    

    感觉这个sql的执行计划是正确的。

  • 相关阅读:
    CODE[VS] 2506 可恶的体育老师
    CODE[VS] 3411 洪水
    CODE[VS] 2692 小明过生日
    CODE[VS] 2291 糖果堆
    CODE[VS] 2008 你已经爱我多久了
    忽然之间
    Amazing grace 奇异恩典
    无处安放
    AC日记
    AC日记
  • 原文地址:https://www.cnblogs.com/wangrongxin/p/5789517.html
Copyright © 2011-2022 走看看