我尝试通过以下代码连接三个表:
SELECT *
FROM tickets t
JOIN evenementen e
ON e.idEvenement = t.fk_tiEvenementID
JOIN klanttyperesult k
ON k.kltr_idKlant = t.fk_tiKlantID;
代码是否有问题,或者我应该在其他地方查找问题?
最佳答案
我认为“继续获取”指的是挂起,很可能您正在选择大量数据。分解您的查询正在执行的操作,以及为什么它会花费很长时间:
SELECT *
- 选择此查询引用的每个表中的每一列。这意味着您将返回大量数据,如果每个表有 7 列,您将返回 21 列数据。
FROM Tickets t
- 来自别名为t
的表tickets
JOIN Evenementen e
- 使用别名 e
连接表 evenementen
,过滤掉表之间没有连接条件的结果。
ON e.idEvenement = t.fk_tiEvenementID
- 根据给定的条件
JOIN klanttyperesult k
- 使用别名 k
连接表 klanttyperesult
,过滤掉表之间没有连接条件的结果。
ON k.kltr_idKlant = t.fk_tiKlantID;
- 根据给定的条件。
如果这些表有很多行,那么您很快就会占用昂贵的连接空间。
您还可能缺少索引,这意味着您正在使用嵌套循环连接(对于大型数据集可能效率低下,请参阅 https://dev.mysql.com/doc/refman/5.7/en/nested-loop-joins.html )。尝试向表中添加一些索引,例如 this .
创建索引门票_evenementenIdx ON 门票 (fk_tiEvenementID)
创建索引门票_klanttyperesultIdIdx ON 门票 (fk_tiKlantID)
在 Evenementen (idEvenement) 上创建索引 Evenementen_ticketsIdIdx
在 klanttyperesult (kltr_idKlant) 上创建索引 klanttyperesultIdIdx
关于mysql - 我的sql查询一直在获取,是代码还是其他什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49381076/