mysql优化问题

tez616oj  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(344)

我正在尝试优化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将返回5条记录。如果指定表中的记录小于n,则查询表中的所有记录都将返回到结果集中[图片来源:guru99.com]
为了解决这个问题,我使用了一种启发式方法来猜测用户的条目数是否很小——如果是这样,我使用了一个需要1500毫秒的不同查询。
我有什么遗漏吗?我不能使用索引,因为数据是加密的。
非常感谢,
乔恩

a0x5cqrl

a0x5cqrl1#

我认为一个索引 ActivityX(user, ActivityNum) 会解决你的问题。
我猜你有一个索引 (ActivityNum) 优化器正在尝试找出是否应该使用索引。这会导致阈值。复合索引应该更好地匹配查询。

相关问题