簡體   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