返回查询结果的相关记录数

时间:2013-10-29 19:43:44

标签: mysql sql

我有两张相关的表格,Tapes&通过Fields TapeID相关的标题 Tapes.TapeID& Titles.TapeID

我希望能够查询Column Artist上的Tapes Table,然后返回每个匹配的Artist记录的标题数

我的查询如下

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%>"

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

请在我的查询中指出错误

1 个答案:

答案 0 :(得分:2)

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

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

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

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