我在mysql数据库中有一个查询,它只返回50条记录,但需要18秒才能执行,这里是查询
SELECT DISTINCT a.UniqueNo, a.TorrentFilename, d.DataValue As Size
FROM (SELECT DISTINCT aa.UniqueNo, aa.TorrentFilename, aa.UploadDate
FROM TorrentList aa INNER JOIN
UploadList b
ON aa.UniqueNo = b.UniqueNo INNER JOIN
Minifile c
ON aa.UniqueNo = c.UniqueNo
ORDER BY aa.UploadDate DESC LIMIT 1, 50
) a LEFT JOIN
TorrentInfo d
ON a.UniqueNo = d.UniqueNo AND d.DataName='Size'
ORDER BY a.UploadDate DESC
查询有什么问题?我对它进行了很多优化,但似乎没有效果。如果我使用MS SQL,只需几毫秒就可以执行它,是不是MySQL有问题呢?
答案 0 :(得分:1)
当没有索引时,SQL Server可以更好地进行连接。聚合更好(用于distinct
)。
您的查询可能会使用以下索引做得更好:
UpLoadList(UniqueNo)
Minifile(UniqueNo)
TorrentList(UploadDate, UniqueNo)
TorrentList(UniqueNo, DataName)
这些不是"覆盖"桌子。但是它们应该促进子查询中的join
和order by
。