SELECT t_wenzhang.contents, t_wenzhang.createTime, t_wenzhang.title,t_wenzhang.pagePath  FROM t_wenzhang LEFT JOIN t_keys ON t_keys.id = t_wenzhang.keyword  where   SUBSTRING( KeyP, 1, 1 )='" + zimu + "' order by createTime  desc
上面t_wenzhang  表4W 数据,t_keys  3W,怎么这个执行10+秒!如果和优化!

解决方案 »

  1.   

    首先是对t_keys.id,t_wenzhang.keyword,KeyP,zimu这4个字段建立索引
    其次如果还是慢可以试着改变一下引擎
    最后可以用explan来帮助选择更好的索引和写出更优化的查询语句!
      

  2.   

    好的设计比好sql 好,不要太依靠sql    可以去了解nosql数据库  对以后用sql有非常大帮助,我现在基本一般不会去用左连接查询了。 你这是文字查询出文章的key?
      

  3.   

    合理优化表的索引,关键连接表的id加上索引。
    where   SUBSTRING( KeyP, 1, 1 )='" + zimu + "' 引起查询变慢,贴出表结构看看。
      

  4.   

     SUBSTRING( KeyP, 1, 1 )='" + zimu + "' 
    不会使用索引,应写作这样
     KeyP like '" + zimu + "%' 
      

  5.   

    上面对t_wenzhang.   下面是 t_keys
      

  6.   

    第一个字母相等就用:
    like 'a%'
      

  7.   

    按照这个方法试下
    如果不行,请问楼主是在服务器上测试还是本地,如果是服务器上可以尝试建立“存储过程”。
    create procedure...
      

  8.   

    主要原因还是因为使用SUBSTRING函数,导致KeyP索引失效,换成"like '".zimu ."%'"  建立KeyP的索引,速度会提高很多。
      

  9.   

    如果索引都建了,主要原因就是在where条件中用了函数,同时也导致每次查询都不会被缓存,再就是join查询要小结果集驱动大结果集
      

  10.   

    是mysql吗?
    SUBSTRING( KeyP, 1, 1 )='" + zimu + "' 这里是php混着吧? 应该是 +$zimu+ 这样?
    改成   KeyP like '{$zimu}%' 或者  KeyP like '"+$zimu+"%' t_keys.id 应该已有索引(主键)
    t_wenzhang.keyword加索引
    createTime  加索引
    KeyP也加索引(可以加长度为1的索引) 然后, 就没问题了
      

  11.   

    也不用left join了, join即可