我有两张相关的表格,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%>"
查询似乎运行然后似乎进入无限循环 我没有语法错误,没有结果
请在我的查询中指出错误
答案 0 :(得分:2)
这是两个可能导致这种糟糕表现的罪魁祸首。首先是Tapes.TapeId
上缺少索引。根据命名,我希望这是Tapes
表的主键。如果没有索引,那么你可能会遇到糟糕的表现。
第二个涉及having
子句的选择性。如上所述,MySQL将聚合所有 group by
的数据,然后过滤掉这些组。在许多情况下,这不会产生太大的影响。但是,如果你有大量数据并且条件是选择性的(意味着几行匹配),那么将它移动到where
子句就会有所不同。
肯定有其他可能性。例如,服务器可能正在处理其他查询。更新查询可以锁定其中一个表。或者,列TapeId
在两个表中可以有不同的类型。
您可以修改问题以包含两个表的定义。此外,在查询之前放置explain
并将输出包含在问题中。这表示MySQL选择的执行计划。