社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

带limit关键字的mysql优化问题

Jon Schlossberg • 5 年前 • 1338 次点击  

我正在尝试优化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
 
1338 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Gordon Linoff
Reply   •   1 楼
Gordon Linoff    6 年前

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

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