我尝试通过以下代码连接三个表:
SELECT *
FROM tickets t
JOIN evenementen e
ON e.idEvenement = t.fk_tiEvenementID
JOIN klanttyperesult k
ON k.kltr_idKlant = t.fk_tiKlantID;
代码是否存在问题,或者我应该在其他地方查找问题?
答案 0 :(得分:1)
通过"继续抓取"我认为你的意思是挂起,你很可能会选择批次的数据。要分解你的查询正在做什么,以及为什么需要花费很长时间:
SELECT *
- 从此查询引用的每个表中选择每一列。这意味着您将返回大量数据,如果每个表有7列,您将返回21列数据。
FROM tickets t
- 来自tickets
的别名t
JOIN evenementen e
- 使用别名evenementen
加入表格e
,过滤掉表格之间没有连接条件的结果。
ON e.idEvenement = t.fk_tiEvenementID
- 根据给定的条件
JOIN klanttyperesult k
- 使用别名klanttyperesult
加入表格k
,过滤掉表格之间没有连接条件的结果。
ON k.kltr_idKlant = t.fk_tiKlantID;
- 根据给定的条件。
如果这些表格有很多行,那么您很快就会进入昂贵的连接区域。
您也可能缺少索引,这意味着您正在使用嵌套循环连接(对于大型数据集可能效率低,请参阅https://dev.mysql.com/doc/refman/5.7/en/nested-loop-joins.html)。尝试在表格中添加一些索引,例如this。
CREATE INDEX tickets_evenementenIdIdx ON tickets (fk_tiEvenementID)
CREATE INDEX tickets_klanttyperesultIdIdx ON tickets (fk_tiKlantID)
CREATE INDEX evenementen_ticketsIdIdx ON evenementen (idEvenement)
CREATE INDEX klanttyperesultIdIdx ON klanttyperesult (kltr_idKlant)