SELECT * FROM A t LEFT JOIN B f ON t.fid=f.fid ORDER BY dateline DESC LIMIT 10;当数据很多的时候,速度就非常慢了,我觉得降序排列之后,选择10条记录,应该很快啊,为什么呢?网上有说建立索引,请问是针对需要关联的字段建立索引还是? 这个示例的话,是在A表和B表的fid字段分别建立索引是不是?另外如果不建立索引的话,有什么优化的SQL语句查询,请指教。

解决方案 »

  1.   

    贴出你的EXPLAIN SELECT * FROM A t LEFT JOIN B f ON t.fid=f.fid ORDER BY dateline DESC LIMIT 10;另外你的表结构,比如现在大家根本就无法猜出你的这个dateline字段在哪个表中。如果是在A中,则你应该创建一个索引(dateline)
      

  2.   

    恩,你好大侠
    A表
    id fid name dateline B表
    fid name dateline
    使用这两个没有什么区别,还是很慢
    SELECT * FROM A t LEFT JOIN B f ON t.fid=f.fid ORDER BY dateline DESC LIMIT 10;
    SELECT * FROM A t LEFT JOIN B f ON t.fid=f.fid ORDER BY t.dateline DESC LIMIT 10;
      

  3.   

    我的视力可能有问题,看不到你把这个结果贴在哪儿了。如果两个表中都有这个dateline  字段,则你的这个SELECT * FROM A t LEFT JOIN B f ON t.fid=f.fid ORDER BY dateline DESC LIMIT 10;语句会报错。
      

  4.   

    解决了,非常感谢我只建立了一个 dateline的索引 ,速度就上来了
    是ORDER BY dateline引起的效率问题不好意思,那个B表没有 dateline