我工作的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