我正在尝试优化mysql查询。只要数据库中特定用户的条目超过15个,下面的查询就可以正常运行。
SELECT activityType, activityClass, startDate, endDate, activityNum, count(*) AS activityType
FROM (
SELECT activityType, activityClass, startDate, endDate, activityNum
FROM ActivityX
WHERE user=?
ORDER BY activityNum DESC
LIMIT 15) temp
WHERE startDate=? OR endDate=?
GROUP BY activityType
当参赛人数少于15人时,表现就很糟糕。我的时间大约是25毫秒,而不是4000毫秒(我需要“15”来确保我得到所有相关数据)。
我发现这些有趣的句子:
“limit n”是关键字,n是从0开始的任意数字,输入0,因为limit不返回查询中的任何记录。输入一个数字5将返回五个记录。如果指定表中的记录小于n,则结果集中返回查询表中的所有记录。[来源:guru99.com]
为了解决这个问题,我使用了一个启发式方法来猜测用户的条目数量是否很小——如果是的话,我使用了另一个大约需要1500毫秒的查询。
我有什么遗漏吗?我不能使用索引,因为数据是加密的。
多谢,