나는 MySQL 데이터베이스 작업 중이다. 어디에 여러 개의 정보 테이블 (10 개 이상)을 하나의 테이블로 병합해야합니까? 그것을하기 위해서 나는 전형적인 결합 스타일을 따르고 있습니다.여러 조인을 사용하여 SQL 쿼리 실행 속도를 향상시키는 방법은 무엇입니까?
Select * from
table_1
Join table_2
on(table_1.id = table_2.id)
Join table_3
on(table_1.id = table_3.id)
작동하지만 실행 시간 동안 많이 고통받습니다. 내 코드를 최적화하는 다른 좋은 방법이 있습니까? 내 코드의 샘플 다음과 같은 : 각 컬럼에 대해 별도의 하위 쿼리를 사용할 필요가 없습니다 것 같습니다
SELECT
distinct
u.Id,
oc.dt,
Daily_Number_Outgoing_Calls,
Daily_Number_Incoming_Calls,
Daily_duration_Outgoing_Calls
FROM
creditfix.users u
JOIN
#1 Daily_No_Out_Calls
(
SELECT
cl.uId,SUBSTRING(DATE,1,10) as dt,
count(1) as Daily_Number_Outgoing_Calls
From creditfix.call_logs as cl
WHERE
cl.`type`=2 #out going calls only
GROUP by cl.uId,dt
) oc
ON (u.Id=oc.Uid)
#2 Daily_No_In_Calls
JOIN
(
SELECT
cl.uId, SUBSTRING(DATE,1,10) as dt,
count(1) as Daily_Number_Incoming_Calls
From creditfix.call_logs as cl
WHERE
cl.`type`=1 #incoming calls only
GROUP by cl.uId,dt
) ic
ON (u.Id=ic.Uid)
#3 Daily_duration_Out_Calls
JOIN
(
SELECT
cl.uId,SUBSTRING(DATE,1,10) as dt,
(sum(duration)) as Daily_duration_Outgoing_Calls
From creditfix.call_logs as cl
WHERE
cl.`type`=2 #out going calls only
GROUP by cl.uId,dt
) od
ON (u.Id=od.uid)
# It goes on like this...
'GROUP BY'에 이름 대신 열 번호를 사용하는 습관을 버리면 쿼리를 읽기가 더 어려워집니다. – Barmar
'SELECT'목록에 열을 삽입 할 경우 코드를 편집 할 때 깨지기 쉽습니다. – Barmar
성능 문제는 테이블을 조인하지 않고 하위 쿼리를 조인하기 때문입니다. 이것들은 실제 테이블처럼 인덱스가 없기 때문에 MySQL이 최적화하기가 어렵습니다. – Barmar