繁体   English   中英

表之间的多个联接

[英]Multiple joins between tables

我有以下表,每个表都有多个记录(〜50k),并且表正在增长。

Table1
BatchID ID Record1

Table 2 
BatchID ID Record2

Table 3
BatchID ID Record3

Table 4 
BatchID ID Record4

以下查询将永远运行(因为联接是四个表的笛卡尔积)。

Select table1.batchid,
table1.ID,
table1.Record1, 
table2.Record2,
Table3.Record3, 
Table4.Record4 
from Table1 JOIN Table 2
on table1.batchID = table2.batchID and table1.ID = table2.ID
JOIN table3 
on table1.BatchID=table3.batchID and table1.ID = table3.ID 
JOIN table4 
on table1.ID = table4.ID and table1.batchID = table4.batchID 

什么应该是最好的方法做到这一点。

您应该在ON子句中同时使用两列添加索引。 例如:

ALTER TABLE `table2` ADD INDEX `IDX_batchid-ID` (`batchid`, `ID`);

首先想到的是,您希望对所有四个表都使用(batchid,id)的复合索引。 这将最匹配查询中的连接条件。

表中有多少条记录具有相同的batchid和id相互匹配? 可能还有其他方式来短语查询。

您的加入看起来不错。 尝试在BatchID和ID的组合上创建索引。

dev.mysql.com

您实际上是否需要所有这些JOIN? 您不能将这四个表合并在一起吗?

例如:

CREATE TABLE MergedTable (
    BatchID INT,
    ID INT,
    Record1 ... ,
    Record2 ... ,
    Record3 ... ,
    Record4 ... ,
    PRIMARY KEY (BatchID, ID)
)

接着:

INSERT INTO MergedTable <your query>

现在,您可以直接从MergedTable中进行SELECT,而无需任何JOIN。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM