ORACLE查询表中某一个字段相同的记录(大于一个),谁能给优化一下

时间:2022-03-09 14:41:15
我写得sql如下:
select * from T_00_EXPO2_DZ_MX X where (select count(1) from T_00_EXPO2_DZ_MX Y where X.ticket_seqno=Y.ticket_seqno 
and X.dz_stat='1' and Y.dz_stat='1')>1;
但是由于表中数据有200万条,查询速度慢,大家有没有更好的办法

8 个解决方案

#1


select * from T_00_EXPO2_DZ_MX X 
where exists (select dz_stat from T_00_EXPO2_DZ_MX Y
where Y.dz_stat = X.dz_stat and Y.dz_stat = '1' and Y.rowid != X.rowid);

#2


select * from T_00_EXPO2_DZ_MX X 
where (
       select count(1) from T_00_EXPO2_DZ_MX Y 
        where X.ticket_seqno=Y.ticket_seqno 
          and X.dz_stat='1' 
          and Y.dz_stat='1'
      )>1

 没头没尾呀,给个执行计划,看看你是不是缺少索引?
  

#3


建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式 http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试。

   

#4


select * from T_00_EXPO2_DZ_MX X 
where ticket_seqno in (select ticket_seqno
from T_00_EXPO2_DZ_MX 
group by ticket_seqno 
having count(1)>1
); 

#5


楼上的,怎么老是这个东东!

#6


建表语句
CREATE TABLE FAPDB.T_00_EXPO2_DZ_MX
(
  FILENAME            VARCHAR2(100 BYTE),
  POST_AGENT          VARCHAR2(10 BYTE),
  REC_NUM             NUMBER(8),
  DZ_STAT             VARCHAR2(1 BYTE),
  EXPO_CODE           VARCHAR2(4 BYTE),
  BRCH_AGENT          VARCHAR2(10 BYTE),
  SAM_NO              VARCHAR2(8 BYTE),
  DEV_SEQNO           VARCHAR2(10 BYTE),
  TICKET_SEQNO        VARCHAR2(10 BYTE),
  EXPO_TICKKIND       VARCHAR2(2 BYTE),
  EXPO_DATE           VARCHAR2(8 BYTE),
  TICKET_PRICE        NUMBER(12,2),
  SALE_TYPE           VARCHAR2(2 BYTE),
  SALE_CHANNEL        VARCHAR2(2 CHAR),
  PAY_TYPE            VARCHAR2(2 BYTE),
  SALE_FLAG           VARCHAR2(1 BYTE),
  DEV_TIME            VARCHAR2(14 BYTE),
  OPER_NO             VARCHAR2(8 BYTE),
  PROMOTION_PRICE     NUMBER(7,2),
  PROMOTION_KIND      VARCHAR2(4 BYTE),
  TAC_CODE            VARCHAR2(8 BYTE),
  TZ_BRCH_AGENT       VARCHAR2(10 BYTE),
  TZ_SAM_NO           VARCHAR2(8 BYTE),
  TZ_DEV_SEQNO        VARCHAR2(10 BYTE),
  TZ_TICKET_SEQNO     VARCHAR2(10 BYTE),
  TZ_EXPO_TICKKIND    VARCHAR2(2 BYTE),
  TZ_EXPO_DATE        VARCHAR2(8 BYTE),
  TZ_TICKET_PRICE     NUMBER(12,2),
  TZ_SALE_TYPE        VARCHAR2(2 BYTE),
  TZ_SALE_CHANNEL     VARCHAR2(2 BYTE),
  TZ_PAY_TYPE         VARCHAR2(2 BYTE),
  TZ_SALE_FLAG        VARCHAR2(1 BYTE),
  TZ_DEV_TIME         VARCHAR2(14 BYTE),
  TZ_OPER_NO          VARCHAR2(8 BYTE),
  TZ_PROMOTION_PRICE  NUMBER(7,2),
  TZ_PROMOTION_KIND   VARCHAR2(4 BYTE),
  TZ_TAC_CODE         VARCHAR2(8 BYTE),
  TZ_CHECKSTAT        VARCHAR2(2 BYTE)          DEFAULT 0
)
TABLESPACE FAPDBSPACE
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


CREATE INDEX FAPDB.I_00_EXPO2_CODE ON FAPDB.T_00_EXPO2_DZ_MX
(EXPO_CODE)
LOGGING
TABLESPACE FAPDBSPACE
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX FAPDB.I_00_EXPO2_FILENAME ON FAPDB.T_00_EXPO2_DZ_MX
(FILENAME)
LOGGING
TABLESPACE FAPDBSPACE
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;

#7


蹭分

#8


谢谢shiyiwan

#1


select * from T_00_EXPO2_DZ_MX X 
where exists (select dz_stat from T_00_EXPO2_DZ_MX Y
where Y.dz_stat = X.dz_stat and Y.dz_stat = '1' and Y.rowid != X.rowid);

#2


select * from T_00_EXPO2_DZ_MX X 
where (
       select count(1) from T_00_EXPO2_DZ_MX Y 
        where X.ticket_seqno=Y.ticket_seqno 
          and X.dz_stat='1' 
          and Y.dz_stat='1'
      )>1

 没头没尾呀,给个执行计划,看看你是不是缺少索引?
  

#3


建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式 http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试。

   

#4


select * from T_00_EXPO2_DZ_MX X 
where ticket_seqno in (select ticket_seqno
from T_00_EXPO2_DZ_MX 
group by ticket_seqno 
having count(1)>1
); 

#5


楼上的,怎么老是这个东东!

#6


建表语句
CREATE TABLE FAPDB.T_00_EXPO2_DZ_MX
(
  FILENAME            VARCHAR2(100 BYTE),
  POST_AGENT          VARCHAR2(10 BYTE),
  REC_NUM             NUMBER(8),
  DZ_STAT             VARCHAR2(1 BYTE),
  EXPO_CODE           VARCHAR2(4 BYTE),
  BRCH_AGENT          VARCHAR2(10 BYTE),
  SAM_NO              VARCHAR2(8 BYTE),
  DEV_SEQNO           VARCHAR2(10 BYTE),
  TICKET_SEQNO        VARCHAR2(10 BYTE),
  EXPO_TICKKIND       VARCHAR2(2 BYTE),
  EXPO_DATE           VARCHAR2(8 BYTE),
  TICKET_PRICE        NUMBER(12,2),
  SALE_TYPE           VARCHAR2(2 BYTE),
  SALE_CHANNEL        VARCHAR2(2 CHAR),
  PAY_TYPE            VARCHAR2(2 BYTE),
  SALE_FLAG           VARCHAR2(1 BYTE),
  DEV_TIME            VARCHAR2(14 BYTE),
  OPER_NO             VARCHAR2(8 BYTE),
  PROMOTION_PRICE     NUMBER(7,2),
  PROMOTION_KIND      VARCHAR2(4 BYTE),
  TAC_CODE            VARCHAR2(8 BYTE),
  TZ_BRCH_AGENT       VARCHAR2(10 BYTE),
  TZ_SAM_NO           VARCHAR2(8 BYTE),
  TZ_DEV_SEQNO        VARCHAR2(10 BYTE),
  TZ_TICKET_SEQNO     VARCHAR2(10 BYTE),
  TZ_EXPO_TICKKIND    VARCHAR2(2 BYTE),
  TZ_EXPO_DATE        VARCHAR2(8 BYTE),
  TZ_TICKET_PRICE     NUMBER(12,2),
  TZ_SALE_TYPE        VARCHAR2(2 BYTE),
  TZ_SALE_CHANNEL     VARCHAR2(2 BYTE),
  TZ_PAY_TYPE         VARCHAR2(2 BYTE),
  TZ_SALE_FLAG        VARCHAR2(1 BYTE),
  TZ_DEV_TIME         VARCHAR2(14 BYTE),
  TZ_OPER_NO          VARCHAR2(8 BYTE),
  TZ_PROMOTION_PRICE  NUMBER(7,2),
  TZ_PROMOTION_KIND   VARCHAR2(4 BYTE),
  TZ_TAC_CODE         VARCHAR2(8 BYTE),
  TZ_CHECKSTAT        VARCHAR2(2 BYTE)          DEFAULT 0
)
TABLESPACE FAPDBSPACE
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


CREATE INDEX FAPDB.I_00_EXPO2_CODE ON FAPDB.T_00_EXPO2_DZ_MX
(EXPO_CODE)
LOGGING
TABLESPACE FAPDBSPACE
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX FAPDB.I_00_EXPO2_FILENAME ON FAPDB.T_00_EXPO2_DZ_MX
(FILENAME)
LOGGING
TABLESPACE FAPDBSPACE
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;

#7


蹭分

#8


谢谢shiyiwan