mysql 分组取每组时间最靠前的两条数据

lzj0470 2010-12-13 05:09:06
在网络上,看到过这样的mysql语句,但是在效率极差。
如:
select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.val
目前,单表数据量是77508.
该表预算数据量最大是60W左右。
不知道怎么写才比较合理?
...全文
1318 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2010-12-13
  • 打赏
  • 举报
回复
没什么好办法,因为你无法避免全表扫描。

你可以创建一个(name,val )的复合索引
WWWWA 2010-12-13
  • 打赏
  • 举报
回复
在name、VAL上建立复合索引试试
lzj0470 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rucypli 的回复:]

业务逻辑应该是每次并不是显示所有的数据,而是一页吧,那用limit限制下,如果效率还是慢,那就改业务逻辑
[/Quote]
是的,现在就是用于分页,每页显示30条。
rucypli 2010-12-13
  • 打赏
  • 举报
回复
业务逻辑应该是每次并不是显示所有的数据,而是一页吧,那用limit限制下,如果效率还是慢,那就改业务逻辑
lzj0470 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwwa 的回复:]

你的索引情况是怎样的
[/Quote]
只有id是索引,其他都没有。数据量不算大,最好是在没有增加索引的情况下比较好。
lzj0470 2010-12-13
  • 打赏
  • 举报
回复
刚才看了一下,类似上面的语句比较多,而且,没有对效率上进行分析过。
  • 打赏
  • 举报
回复
效率的确很差
WWWWA 2010-12-13
  • 打赏
  • 举报
回复
你的索引情况是怎样的
ACMAIN_CHM 2010-12-13
  • 打赏
  • 举报
回复
参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧