是一个积分明细表,表结构如下:id user_id type score
1 12 1 13
2 16 2 24
3 12 2 53
4 22 1 32
5 14 1 17
6 32 2 43
7 22 2 34
...一个用户有多条积分明细记录。需要求出用户的总积分排行。
我写的SQL如下:
select user_id, sum(score) as total_score from tablename
group by user_id order by total_score desc这样写可以实现功能,但是当表数据量很大的时候(几百万条),查询起来变得非常慢!
请教在不增加表的情况下如何优化这个SQL实现同样的功能,谢谢。
1 12 1 13
2 16 2 24
3 12 2 53
4 22 1 32
5 14 1 17
6 32 2 43
7 22 2 34
...一个用户有多条积分明细记录。需要求出用户的总积分排行。
我写的SQL如下:
select user_id, sum(score) as total_score from tablename
group by user_id order by total_score desc这样写可以实现功能,但是当表数据量很大的时候(几百万条),查询起来变得非常慢!
请教在不增加表的情况下如何优化这个SQL实现同样的功能,谢谢。
解决方案 »
- 复制数据库问题
- 请问为何这个触发器不能正常工作,谢谢!
- 有什么方法 可以让root能够使用??
- 被难倒了,中文系统如何导入导出包含韩文的mysql数据库?
- 如何用mysql读取BDB数据库文件??急~~~~
- mysql查表问题
- 菜鸟急求!!!!关于LINUX下不能联接MySQL的问题~~
- 在linux 用 C api 连接Mysql程序编译后运行出错!!
- 单条记录的长度是否会影响数据库查询的效率?
- 两台电脑win7/10,同一版本数据库,同一个查询语句,同样的索引,查询时间前者22秒,后者1秒
- 关于MYSQL拷贝DATA 覆盖到DATA目录下的1067问题
- 急问 /usr/bin/ld: cannot find -lz ?
from tablename
group by user_id
order by total_score desc这个查询,没有什么好办法。唯一能做的就是添加 (user_id,score) 的索引。
但无法避免全表扫描
你可以更改表该字段的结构 是自动排序的
做 (user_id,score) 的索引能有用吗?