Py学习  »  DATABASE

带limit关键字的mysql优化问题

Jon Schlossberg • 5 年前 • 1341 次点击  

我正在尝试优化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毫秒的查询。

我有什么遗漏吗?我不能使用索引,因为数据是加密的。

多谢,

  • 乔恩
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40751
 
1341 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Gordon Linoff
Reply   •   1 楼
Gordon Linoff    6 年前

我想一个索引 ActivityX(user, ActivityNum) 会解决你的问题。

我猜你有个索引 (ActivityNum) 优化器正试图找出是否应该使用索引。这会导致阈值。复合索引应该更好地匹配查询。