SELECT
Distinct
a.id,
a.lasttime,
a.lastuser,
b.datafield AS sa,
c.datafield AS sc,
d.datafield AS sc,
e.datafield AS si,
f.datafield AS sp,
g.datafield AS su,
h.datafield AS ss,
i.datafield AS st
FROM a
LEFT JOIN b ON a.id = b.id
LEFT JOIN c ON a.id = c.id
LEFT JOIN d ON a.id = d.id
LEFT JOIN e ON a.id = e.id
LEFT JOIN f ON a.id = f.id
LEFT JOIN g ON a.id = g.id
LEFT JOIN h ON a.id = h.id
LEFT JOIN i ON a.id = i.id
where i.datafield like '%人民%'
GROUP BY a.id用了以上n个左连接,大概每个表有10万左右的数据,速度非常慢,诸位能否给出解决方法

解决方案 »

  1.   

    难也太多left join了, 另外还有like[align=center]====  ====
    [/align]
      

  2.   

    你先查I表,先用条件i.datafield like '%人民%' 过滤记录,看看。不过最好是想办法修改sql的逻辑。否则没有什么好办法。
      

  3.   

    Distinct可能有一定的消耗啊,你的Id都用索引了吧,数据一多就会慢的啦,你有多慢啊?你用explain 加你的语句看看你的语句读了多少行,顺便贴个结果上来看看。
      

  4.   

    XFliangwh ,id都做索引了,explain的时候每个表都过了一遍,大概超过3分钟,受不了阿
      

  5.   

    后面几个可以用交叉连接,没有必要每个都要左联的
    SELECT
    Distinct
    a.id,
    a.lasttime,
    a.lastuser,
    b.datafield AS sa,
    c.datafield AS sc,
    d.datafield AS sc,
    e.datafield AS si,
    f.datafield AS sp,
    g.datafield AS su,
    h.datafield AS ss,
    i.datafield AS st
    FROM a
    LEFT JOIN (b,c,d,e,f,g,h,i) 
    ON (a.id = b.id and a.id = c.id and a.id = d.id and a.id = e.id and a.id = f.id and a.id = g.id and a.id = h.id and a.id = i.id and i.datafield like '%人民%')
    GROUP BY a.id 
      

  6.   

    由于您是新用户,所以特此介绍一下结贴的方法
    如果您问题已经得解决,请您及时结帖给分,以感谢帮助您的朋友。 结帖方法:点击版面右上方或右下方 [管理] ,进入页面后就可以输入密码,分别给分,结帖。 
     或参考:
    http://www.csdn.net/help/over.asp
    http://topic.csdn.net/u/20080110/19/7cb462f1-cac6-4c28-848e-0a879f4fd642.html
    =============================================================================
    问题解决,请及时结贴。  
     正确结贴方法:    
     管理帖子-->给分-->输入密码-->结贴[align=center]====  ====
    [/align]