* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Linux 64bit |
|
CUBRID 10.2 (10.2.7.8896-cebe4e9) (64bit release build for Linux) (Jan 26 2022 11:35:52) |
|
SQLGate |
|
* 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