在慢日志中频繁出现下面类似的语句SET timestamp=1361331064;
SELECT SQL_CALC_FOUND_ROWS B.*,A.* FROM qb_fenlei_content A LEFT JOIN qb_fenlei_content_1 B ON A.id=B.id WHERE A.fid=11  AND A.city_id='1'  AND A.yz='1'  ORDER BY A.list DESC LIMIT 10,10;
# Time: 130220 11:32:19把content content_1的索引贴出来,大家帮忙分析一下。qb_fenlei_content 的索引
qb_fenlei_content1 的索引

解决方案 »

  1.   

    alter table qb_fenlei_content  add index (fid,city_id,yz);
      

  2.   


    qb_fenlei_content   不是有个list索引含有这三项吗,还多了一个list 有区别吗?
      

  3.   

    你那个索引list在第一位   根本用不到的你可以explain看执行计划
      

  4.   

    我执行了
    explain SELECT SQL_CALC_FOUND_ROWS B.*,A.* FROM qb_fenlei_content A LEFT JOIN qb_fenlei_content_1 B ON A.id=B.id WHERE A.fid=11  AND A.city_id='1'  AND A.yz='1'  ORDER BY A.list DESC LIMIT 10,10;
    我是第一次使用explain,具体功能还没研究清楚,是不是表示没有使用list索引?
      

  5.   

    对的 A表使用了fid索引另外你的list索引数据库在这个sql上是用不到的一定要新加一个新的那三个字段的索引
      

  6.   


    你好。加了一个你说的三个字段的索引fid_2,仍然是原来的问题,慢日志里还是有这个查询
    这是explain
      

  7.   

    好吧 还是没用到新建立的索引强制使用索引
    SELECT SQL_CALC_FOUND_ROWS B.*,A.* FROM qb_fenlei_content A force index (fid_2) LEFT JOIN qb_fenlei_content_1 B ON A.id=B.id WHERE A.fid=11  AND A.city_id='1'  AND A.yz='1'  ORDER BY A.list DESC LIMIT 10,10;
      

  8.   

    如果还慢  删掉fid_2
    加上list列建立索引alter table qb_fenlei_content  add index (fid,city_id,yz,list);
      

  9.   

    这个如果使用强制索引,后面的 LIMIT 10,10; 是不是去掉就可以,因为每次分页可能不一样的
    SELECT SQL_CALC_FOUND_ROWS B.*,A.* FROM qb_fenlei_content A force index (fid_2) LEFT JOIN qb_fenlei_content_1 B ON A.id=B.id WHERE A.fid=11  AND A.city_id='1'  AND A.yz='1'  ORDER BY A.list DESC 
    去掉 limit?