0

我有 2 个相关表,通过字段 TapeID Tapes.TapeID 和 Titles.TapeID 相关的磁带和标题

我希望能够查询艺术家列上的磁带表,然后返回每个匹配艺术家记录的标题数

我的查询如下

SELECT Tapes.Artist,COUNT(Titles.TapeID) 
FROM Tapes 
INNER JOIN Titles on Titles.TapeID=Tapes.TapeID 
GROUP BY Tapes.Artist 
HAVING TAPES.Artist LIKE <ArtistName%>"

查询似乎运行然后似乎进入无限循环我没有语法错误也没有结果

请指出我查询中的错误

4

1 回答 1

2

这里有两个可能导致这种糟糕表现的罪魁祸首。首先是缺少索引Tapes.TapeId。根据命名,我希望这是Tapes表上的主键。如果没有索引,那么您的性能可能会很差。

第二个将涉及having条款的选择性。如前所述,MySQL 将聚合所有数据,group by然后过滤掉这些组。在许多情况下,这不会有太大的不同。但是,如果您有大量数据并且条件是选择性的(意味着只有几行匹配),那么将其移至where子句会有所不同。

肯定还有其他可能性。例如,服务器可能正在处理其他查询。更新查询可能会锁定其中一个表。或者,两个表中的列TapeId可能具有不同的类型。

您可以修改您的问题以包含两个表的定义。此外,放在explain查询之前并将输出包含在问题中。这表示 MySQL 选择的执行计划。

于 2013-10-29T19:52:44.373 回答