这个表a有130万条记录
select distinct a.id,a.name,a.birthdate 
from a t1, a t2 ,c ,d 
where trim(ifnull(t1.ip,'')) <>''    
    and trim(ifnull(t2.ip,'')) <>'' 
    and t1.ip=t2.ip 
and t1.id != t2.id 
and t1.id=c.id
and t1.id=d.id
order by a.birthdate 执行发现很慢 , 有1个多小时, 
几乎要放弃。 
现在思考 如何针对大表计算sql的计算量

解决方案 »

  1.   

    观察 记录在那个表还在插入
    这个sql已经执行快2小时 
    已经没耐心 ,  问题是他还在不停的及时加入新数据  sessionlog
    有没有什么办法可以做这个sql??
      

  2.   

    解决这样的问题一般有两种方法,一种是sql语句的优化,另一种就是建立合适的索引,索引可以很大程度上加速单个或少量记录的查询速度。
      

  3.   

    如何去掉这个session , 现在加了索引 系统白屏, 到服务器linux也看不到这个session
    现在如何去掉这个sql语句
      

  4.   

    kill掉 ,质疑mysql的大表处理能力? (甚至不如sqlserver2005    2005搞1亿的大表都不是这么慢 的 )
      

  5.   

    select distinct a.id,a.name,a.birthdate 
    from a t1, a t2 ,c ,d 
    wheret1.lastaccess<='2009-06-01'   and t1.lastaccess>='2009-05-01' and 
    t2.lastaccess<='2009-06-01'   and t2.lastaccess>='2009-05-01' and trim(ifnull(t1.ip,'')) <>''    
        and trim(ifnull(t2.ip,'')) <>'' 
        and t1.ip=t2.ip 
    and t1.id != t2.id 
    and t1.id=c.id 
    and t1.id=d.id 
    order by a.birthdate 我这样限制到一个月的数据  但是还是不能看到数据 已经半小时
    索引加到了ip, 
    现在我想最大的原因在 ip字段
    10.232.232.123  这样 是字符型的 ,比较需要耗尽大量的资源。
    当初的设计导致处理很艰难。按照道理应该处理成hash数字。
    现在该如何处理这个ip字段 。