mysql - 我的sql查询一直在获取,是代码还是其他什么?

标签 mysql sql sql-server

我尝试通过以下代码连接三个表:

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/

相关文章:

sql - 是否可以从多个表中进行选择,并将其名称作为子查询的结果?

SQL显示Count为0时的月份

sql-server - 触发器 - 是否需要 BEGIN/COMMIT TRAN

sql-server - 如何在创建表的Sql查询中在列名中设置括号

mysql - 每当尝试将另一个表中的列作为别名连接时,都会出现 "subquery returns more than one row"错误?

php - 将输入的数据从 html 表单添加到 mysql 数据库,简单

php - 将 CSV 文件写入 SQL

sql - MS SQL 中的自引用约束

sql - 对字符串的一部分进行分组时避免子查询

java - 方法有时会捕获一个 org.hibernate.exception.JDBCConnectionException,为什么?