select a.tid,a.subject,a.cid,FROM_UNIXTIME(a.createtime,'%Y/%m-%d') date,a.resume,b.title,a.pic_url from oho_colonys_note a,oho_custom_cat b where a.havepic=1 and b.pid=18 and a.cid=b.cid order by a.createtime desc limit 1
其中a为新闻表,数据7W条数据,b为新闻分类表,数据516条
执行时间72s
是因为sql语句问题,还是其他的什么原因。。
跪求赐教啊!!!

解决方案 »

  1.   

    索引情况如何
    在两表CID上建立索引没有
    CID、createtime 上建立复合索引试试
      

  2.   

    create index ix_tb_chc on oho_colonys_note(cid,havepic,createtime)
      

  3.   

    explain select a.tid,a.subject,a.cid,FROM_UNIXTIME(a.createtime,'%Y/%m-%d') date,a.resume,b.title,a.pic_url from oho_colonys_note a,oho_custom_cat b where a.havepic=1 and b.pid=18 and a.cid=b.cid order by a.createtime desc limit 1
    贴结果
      

  4.   

    贴出你的
    EXPLAIN select a.tid,a.subject,a.cid,FROM_UNIXTIME(a.createtime,'%Y/%m-%d') date,a.resume,b.title,a.pic_url 
    from oho_colonys_note a,oho_custom_cat b 
    where a.havepic=1 and b.pid=18 and a.cid=b.cid 
    order by a.createtime desc 
    limit 1和show index from oho_colonys_note;
    show index from oho_custom_cat你的语句中有 连接查询,还有排序,不是只在这两个字段上创建索引就可以有显著提高的。
      

  5.   

    'oho_colonys_note', '0', 'PRIMARY', '1', 'siteid', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '0', 'PRIMARY', '2', 'id', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '0', 'id', '1', 'id', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '0', 'uid', '1', 'tid', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'siteid_cid', '1', 'siteid', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'siteid_cid', '2', 'cid', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'search1', '1', 'siteid', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'search1', '2', 'ifcheck', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'search1', '3', 'cid', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'search1', '4', 'releasetime', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'topped', '1', 'ord', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'topped', '2', 'releasetime', 'A', NULL, NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'topped', '3', 'createtime', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'havepic', '1', 'havepic', 'A', '73302', NULL, NULL, '', 'BTREE', ''
    'oho_colonys_note', '1', 'createtime', '1', 'createtime', 'A', '73302', NULL, NULL, '', 'BTREE', ''这个是note的索引。对应的列名为
    table non_unique key_name seq_in_index column_name collection Cardinality sub_part
    packed null index_type comment
    有点乱。
      

  6.   

    1. 给createtime 加个索引。
    2. 配置你的my.cnf 或 my.ini ,
    在 [mysqld]下配置参数max_length_for_sort_data=3000
    如果没有配这个参数,就配上;如果原来有配,但是值很小,改大。嗯,3000基本够了吧。
    在 [mysqld]下配置参数sort_buffer_size=2M
    2M差不多够用了配置完后别忘了重启mysql服务。3.你用我改的这个再试试:
    select 
    a.tid,
    a.subject,
    a.cid,
    FROM_UNIXTIME(a.createtime,'%Y/%m-%d') date,
    a.resume,
    b.title,
    a.pic_url 
    from oho_custom_cat b inner join oho_colonys_note a
    on a.cid=b.cid
    where a.havepic=1 and b.pid=18
    order by a.createtime desc 
    limit 14.如果还是慢,建议拆成简单SQL,用存储过程。