내 테이블은 다음과 같이이다 : 나는 오류 및 지연이 있었다 얼마나 많은 고유의 사용자와 그들 중 얼마나 많은보고 싶어요 각 entry_point 당 : 내가 달성하고자하는 것은 다음과 같은 요약입니다중첩 쿼리없이 MySQL에서 그룹 집계를 수행하는 방법은 무엇입니까?
CREATE TABLE USER_TRANSACTIONS (
START_TIME BIGINT UNSIGNED NOT NULL,
APPLICATION_ID CHAR(64) BINARY NOT NULL,
ENTRY_POINT CHAR(255) BINARY NOT NULL,
USER_ID CHAR(64) BINARY NOT NULL,
ERROR_VIOLATION BIT(1) NOT NULL,
LATENCY_VIOLATION BIT(1) NOT NULL,
PRIMARY KEY (START_TIME, APPLICATION_ID, ENTRY_POINT, USER_ID)
)
문제. 나는이 쿼리와 함께이 목표를 달성 할 수
ENTRY_POINT | TOTAL_USERS | TOTAL_ERRORS | TOTAL_LATENCY
page1 | 2 | 2 | 1
page2 | 1 | 1 | 1
: 예를 들어
SELECT UT.ENTRY_POINT, COUNT(USER_ID) AS TOTAL_USERS, SUM(EXP_ERRORS) AS TOTAL_ERRORS, SUM(EXP_LATENCY) AS TOTAL_LATENCY
FROM (
SELECT ENTRY_POINT, USER_ID,
BIT_OR(ERROR_VIOLATION) AS EXP_ERRORS,
BIT_OR(LATENCY_VIOLATION) AS EXP_LATENCY
FROM user_transactions
GROUP BY ENTRY_POINT, USER_ID
) AS UT
GROUP BY UT.ENTRY_POINT;
중첩 된 쿼리는 사용자가 오류 또는 지연 문제를 경험 한 경우 요약 사용
하지만, 테이블에 데이터가 많아서 성능 문제가 있습니다.
제 질문은 내부 쿼리의 사용을 피하기 위해이 쿼리를 어떻게 최적화 할 수 있습니까?
SELECT
ENTRY_POINT
,COUNT(USER_ID) AS TOTAL_USERS
,SUM(EXP_ERRORS) AS TOTAL_ERRORS
,SUM(EXP_LATENCY) AS TOTAL_LATENCY
FROM user_transactions
GROUP BY ENTRY_POINT
조회에 보이는 거의 나에게 최적의 같은 :
당신이 사용자 대신 전체 오류의 오류가있는하려면 다음은 쿼리를 작성하는 방법 중 하나입니다. 모든 행을 처리해야하기 때문에 많은 데이터가 비싸게됩니다. 기본 데이터가 너무 많이 변경되지 않으면 구체화 된보기로 작업 할 수 있습니다. –