比如有这么一个SQL语句:SELECT cm.username AS useraccount,cm.email AS  email,if(b.registTime,b.realname,cmf.realname) AS username,
if(b.registTime,b.phonenumber,cmf.phonenumber) AS phonenumber,
if(b.registTime,b.provinceid,cmf.provinceid) AS provinceid,
if(b.registTime,b.cityid,cmf.cityid) AS cityid
FROM c_members cm JOIN c_memberfields cmf ON cm.uid=cmf.uid LEFT JOIN b_user b ON cm.uid=b.uid
WHERE cmf.updatedate<=1299135667 and cmf.updatedate>1299135667-3600;想要把IF判断放到PHP处理,应该如何改写这个SQL。或者说应该如何优化这个语句以达到更好的效果,比如说涉及到数百万级数据的检索。谢谢!!

解决方案 »

  1.   

    registTime中内容是什么,什么类型
      

  2.   

    if(b.registTime,b.realname,cmf.realname) AS username
    解释一下
      

  3.   

    如果b.registTime不为空刚取b.realname as username,反之则取cmf.realname AS username
      

  4.   

    IF没什么可优化的,在SQL语句中处理或者移到PHP中处理对效率影响不会太大。你的优化主要是要看
    FROM c_members cm JOIN c_memberfields cmf ON cm.uid=cmf.uid LEFT JOIN b_user b ON cm.uid=b.uid
    WHERE cmf.updatedate<=1299135667 and cmf.updatedate>1299135667-3600;这段的效率。贴出你的explain select * 
    FROM c_members cm JOIN c_memberfields cmf ON cm.uid=cmf.uid LEFT JOIN b_user b ON cm.uid=b.uid
    WHERE cmf.updatedate<=1299135667 and cmf.updatedate>1299135667-3600;和 
    show index from c_members;
    show index from c_memberfields;
    show index from b_user;