Background Image

FORUM

조회 수 135 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Linux 64bit
CUBRID Ver.
CUBRID 10.2 (10.2.7.8896-cebe4e9) (64bit release build for Linux) (Jan 26 2022 11:35:52)
CUBRID TOOL Ver.
SQLGate
응용 환경(API)
 


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
SQL문 실행이 느립니다.

 

select use_start
                                 , use_end
                                 , IF(reserve_type = 2, 1, 0) * (UNIX_TIMESTAMP(use_end) - UNIX_TIMESTAMP(use_start)) / 60 AS user_runtime
                                 , IF(reserve_type != 2, 1, 0) * (UNIX_TIMESTAMP(use_end) - UNIX_TIMESTAMP(use_start)) / 60 AS staff_runtime
                                 , run_dist
                                 , IF(reserve_type = 2, 1, 0) AS user_uses
                                 , IF(reserve_type != 2, 1, 0) AS staff_uses
                                   , use_point
                                   , coupon_discount
                              from reserve a INNER join
                               (select distinct date_format(use_start, '%Y-%m-%d') as stat_date from reserve) b
                                 on ((use_start <  stat_date and use_end   >= adddate(stat_date, 1))
                           or (use_start >= stat_date and use_start <  adddate(stat_date, 1))
                           or (use_end   >= stat_date and use_end   <  adddate(stat_date, 1)));
                             where use_start >= '2021-08-24'  
                               and status in (1,2,3,4,5)

 

이 SQL 문은 구성하는 두개의 select문에 대해서 각각 실행한 응답은 빠릅니다.

 

1)

select use_start
                                 , use_end
                                 , IF(reserve_type = 2, 1, 0) * (UNIX_TIMESTAMP(use_end) - UNIX_TIMESTAMP(use_start)) / 60 AS user_runtime
                                 , IF(reserve_type != 2, 1, 0) * (UNIX_TIMESTAMP(use_end) - UNIX_TIMESTAMP(use_start)) / 60 AS staff_runtime
                                 , run_dist
                                 , IF(reserve_type = 2, 1, 0) AS user_uses
                                 , IF(reserve_type != 2, 1, 0) AS staff_uses
                                   , use_point
                                   , coupon_discount
                              from reserve a

2)

select distinct date_format(use_start, '%Y-%m-%d') as stat_date from reserve

 

1) 2)를 각각 실행한 응답속도는 매우 빠릅니다.

 

select distinct date_format(use_start, '%Y-%m-%d') as stat_date from reserve 를 실행시켜 레코드의 건수를 확인하면

 

148694 건입니다.

 

SQLGate에서 해당 테이블의 Create문을 가져와본 결과는 다음과 같습니다.

 

CREATE TABLE [DBA].[reserve] (
       [id] CHARACTER VARYING(32) NOT NULL,
       [product_name] CHARACTER VARYING(64) NOT NULL,
       [reserver_id] CHARACTER VARYING(40) NOT NULL,
       [reserver_name] CHARACTER VARYING(64) NOT NULL,
       [age] INTEGER NOT NULL,
       [sex] INTEGER NOT NULL,
       [status] CHARACTER VARYING(10) NOT NULL,
       [reserve_type] CHARACTER VARYING(10) NOT NULL,
       [trip_type] CHARACTER VARYING(20) NOT NULL,
       [car_number] CHARACTER VARYING(20) NOT NULL,
       [model] CHARACTER VARYING(40) NOT NULL,
       [owner] CHARACTER VARYING(40) NOT NULL,
       [origin_area] INTEGER NOT NULL,
       [origin_spot] CHARACTER VARYING(50) NOT NULL,
       [dest_area] INTEGER NOT NULL,
       [dest_spot] CHARACTER VARYING(50) NOT NULL,
       [reserve_start] DATETIME NOT NULL,
       [reserve_end]   DATETIME NOT NULL,
       [use_start]     DATETIME,
       [use_end]       DATETIME,
       [engine_off]    DATETIME,
       [run_dist]      INTEGER NOT NULL,
       [deposit]       BIGINT NOT NULL,
       [exclude]       BIGINT NOT NULL,
       [deposit_yn] CHARACTER(1) NOT NULL,
       [pickup_charge] BIGINT NOT NULL,
       [pickup_charge_yn] CHARACTER(1) NOT NULL,
       [pickup_excharge] BIGINT NOT NULL,
       [pickup_excharge_yn] CHARACTER(1) NOT NULL,
       [ride_charge] BIGINT NOT NULL,
       [ride_charge_yn] CHARACTER(1) NOT NULL,
       [etc_charge] BIGINT NOT NULL,
       [etc_charge_yn] CHARACTER(1) NOT NULL,
       [use_charge] BIGINT NOT NULL,
       [use_charge_yn] CHARACTER(1) NOT NULL,
       [use_point] BIGINT NOT NULL,
       [use_coupon] CHARACTER VARYING(64) NOT NULL,
       [coupon_discount] BIGINT NOT NULL,
       [pay_charge]      BIGINT NOT NULL,
       [pay_yn] CHARACTER(1) NOT NULL,
       CONSTRAINT [pk_reserve_id]
              PRIMARY KEY ([id]),
              INDEX [ref48] ([car_number]),
              INDEX [ix_reserve2] ([status], [reserve_type], [origin_area], [origin_spot], [dest_area], [dest_spot], [reserve_start], [reserve_end]),
              INDEX [ix_reserve3] ([use_start], [use_end]),
              INDEX [ix_reserve1] ([reserver_id], [reserver_name])
)
COLLATE utf8_bin

 

 

  • ?
    steve 2022.11.23 10:08
    잘못된 정보가 있어서 바로잡습니다.
    reserve table에 있는 record의 건수는 148694건이며
    select distinct date_format(use_start, '%Y-%m-%d') as stat_date from reserve 를 실행시켜 레코드의 건수를 확인한 결과는 470 건입니다.
  • ?
    steve 2022.11.23 12:03

    다른 방법으로 시도해 보아도 마찬가지 입니다. 실행시간 250초

     

    1. SQL

    select exclude, use_start
                                     , use_end
                                     , IF(reserve_type = 2, 1, 0) * (UNIX_TIMESTAMP(use_end) - UNIX_TIMESTAMP(use_start)) / 60 AS user_runtime
                                     , IF(reserve_type != 2, 1, 0) * (UNIX_TIMESTAMP(use_end) - UNIX_TIMESTAMP(use_start)) / 60 AS staff_runtime
                                     , run_dist
                                     , IF(reserve_type = 2, 1, 0) AS user_uses
                                     , IF(reserve_type != 2, 1, 0) AS staff_uses
                                       , use_point
                                       , coupon_discount
                                  from reserve a INNER join
                                   stat_dates b
                                   on (use_start <  stat_date and use_end   >= adddate(stat_date, 1)
                               or (use_start >= stat_date and use_start <  adddate(stat_date, 1))
                               or (use_end   >= stat_date and use_end   <  adddate(stat_date, 1)));

     

    2. record count

    SELECT COUNT(*) FROM reserve; -> 149278 건

    SELECT COUNT(*) FROM stat_dates; -> 457 건

     

    3. schema
    reserve table

    CREATE TABLE [DBA].[reserve] (
           [id] CHARACTER VARYING(32) NOT NULL,
           [product_name] CHARACTER VARYING(64) NOT NULL,
           [reserver_id] CHARACTER VARYING(40) NOT NULL,
           [reserver_name] CHARACTER VARYING(64) NOT NULL,
           [age] INTEGER NOT NULL,
           [sex] INTEGER NOT NULL,
           [status] CHARACTER VARYING(10) NOT NULL,
           [reserve_type] CHARACTER VARYING(10) NOT NULL,
           [trip_type] CHARACTER VARYING(20) NOT NULL,
           [car_number] CHARACTER VARYING(20) NOT NULL,
           [model] CHARACTER VARYING(40) NOT NULL,
           [owner] CHARACTER VARYING(40) NOT NULL,
           [origin_area] INTEGER NOT NULL,
           [origin_spot] CHARACTER VARYING(50) NOT NULL,
           [dest_area] INTEGER NOT NULL,
           [dest_spot] CHARACTER VARYING(50) NOT NULL,
           [reserve_start] DATETIME NOT NULL,
           [reserve_end]   DATETIME NOT NULL,
           [use_start]     DATETIME,
           [use_end]       DATETIME,
           [engine_off]    DATETIME,
           [run_dist]      INTEGER NOT NULL,
           [deposit]       BIGINT NOT NULL,
           [exclude]       BIGINT NOT NULL,
           [deposit_yn] CHARACTER(1) NOT NULL,
           [pickup_charge] BIGINT NOT NULL,
           [pickup_charge_yn] CHARACTER(1) NOT NULL,
           [pickup_excharge] BIGINT NOT NULL,
           [pickup_excharge_yn] CHARACTER(1) NOT NULL,
           [ride_charge] BIGINT NOT NULL,
           [ride_charge_yn] CHARACTER(1) NOT NULL,
           [etc_charge] BIGINT NOT NULL,
           [etc_charge_yn] CHARACTER(1) NOT NULL,
           [use_charge] BIGINT NOT NULL,
           [use_charge_yn] CHARACTER(1) NOT NULL,
           [use_point] BIGINT NOT NULL,
           [use_coupon] CHARACTER VARYING(64) NOT NULL,
           [coupon_discount]      BIGINT NOT NULL,
           [stay_point_rewards]   BIGINT DEFAULT 0 NOT NULL,
           [charge_point_rewards] BIGINT DEFAULT 0 NOT NULL,
           [pay_charge]           BIGINT NOT NULL,
           [pay_yn] CHARACTER(1) NOT NULL,
           CONSTRAINT [pk_reserve_id]
                  PRIMARY KEY ([id]),
                  INDEX [ref48] ([car_number]),
                  INDEX [ix_reserve2] ([status], [reserve_type], [origin_area], [origin_spot], [dest_area], [dest_spot], [reserve_start], [reserve_end]),
                  INDEX [ix_reserve3] ([use_start], [use_end]),
                  INDEX [ix_reserve1] ([reserver_id], [reserver_name])
    )
    COLLATE utf8_bin

    stat_dates table

    CREATE TABLE [DBA].[stat_dates] (
           [stat_date] CHARACTER(10) NOT NULL,
           CONSTRAINT [pk_stat_dates_stat_date]
                  PRIMARY KEY ([stat_date])
    )
    REUSE_OID,
    COLLATE utf8_bin


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4125
3779 python 3.9 지원 문의 1 리치타이거 2023.01.17 80
3778 Python Cubrid DB 연동 시 import _cubrid 오류 1 이노무소오파 2023.01.13 118
3777 cci에서 패스워드 암호화 사용 방법 1 가을이아빠 2023.01.12 49
3776 데이터베이스 백업, 복구(backupdb, restoredb) 1 wiz 2023.01.12 215
3775 실리콘 맥(M1, ARM) 큐브리드 매니저 지원 문의 2 큐유저 2023.01.09 192
3774 attribute가 AUTO_INCREMENT로 생성됐는지 확인할 수 있는 딕셔너리는 무엇인가요? 3 새옹지마 2023.01.08 315
3773 varchar <-> collection으로 변환이 가능한가요? 1 새옹지마 2023.01.08 42
3772 SET, MULTISET, LIST과 같은 컬렉션 타입 컬럼에 저장된 원소의 갯수를 알고 싶습니다. 1 새옹지마 2023.01.06 111
3771 JDBC로 SET 타입의 데이터를 get/set 하는 메소드는 각각 무엇인가요? 4 새옹지마 2023.01.04 91
3770 JDBC로 BIT(n) 타입의 데이터를 get/set 하는 메소드는 각각 무엇인가요? 2 새옹지마 2023.01.03 52
3769 큐브리드 매니저 관리모드 접속 시 오류가 발생합니다. 4 file 정A 2023.01.03 233
3768 WHERE절에 REGEXP_REPLACE를 넣고 실행하면 다운됩니다. 3 거지같은 2023.01.02 290
3767 암호화관련 문의 드립니다. 1 file 초코초코초 2022.12.29 79
3766 모든 테이블의 목록과 각 테이블의 로우 (레코드) 수 확인 4 키롱 2022.12.28 135
3765 큐브리드 FOR문 관련 질의드립니다. 1 계란 2022.12.28 184
3764 [처리완료] 큐브리드 unloaddb, loaddb 시 특수문자 깨짐 및 Lexical error 4 file 백수인 2022.12.27 119
3763 쿼리 튜닝 및 실행계획 관련 문의 드립니다. 3 file kikiki767 2022.12.23 114
3762 펑션 오류 문의드립니다 8 초코초코초 2022.12.17 130
3761 insert 시 오류 문의 1 steve 2022.12.16 111
3760 cubrid11.2 embedded SQL 지원 여부 및 메뉴얼 위치? 1 jjune1206 2022.12.15 42
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 198 Next
/ 198

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales