[英]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的組合上創建索引。
您實際上是否需要所有這些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.