在网络上,看到过这样的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左右。
不知道怎么写才比较合理?

解决方案 »

  1.   

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

  2.   

    业务逻辑应该是每次并不是显示所有的数据,而是一页吧,那用limit限制下,如果效率还是慢,那就改业务逻辑
      

  3.   

    在name、VAL上建立复合索引试试
      

  4.   

    没什么好办法,因为你无法避免全表扫描。你可以创建一个(name,val )的复合索引