有一个表用来存储N多文章,每篇文章都有一个id(主键)和一个类别属性class_id(已建索引),现在我知道一篇文章的id,想找到表中所有与之类别相同的文章,可以有三种sql来查询
1、sql1 = "select class_id from t_articles where id=$id";
   先查询得到class_id
   sql2 = "select id from t_articles where class_id=$class_id"
2、sql = "select id from t_article where class_id=(select class_id from t_articles)"
3、sql = "select t1.id from t_articles as t1,t_articles as t2 where t1.class_id=t2.class_id and t2.id=$id"请问这三种方法中哪种查询效率最高呢

解决方案 »

  1.   

    mysql中1 3效率一样,都没问题   2是禁止使用的
      

  2.   

    额为啥说mysql中禁用呢,而且,在命令行中2也是可以使用的啊
      

  3.   

    mysql三条语句所实现的功能都一样,没有可比性。
      

  4.   

    MySQL优化select语句你可以参考'MYSQL5.1 CHM版中文帮助文档.chm' 1.去除不必要的括号:
     ((a AND b) AND c OR (((a AND b) AND (c AND d))))
    ->(a AND b AND c) OR (a AND b AND c AND d)
    2.常量重叠:
    · (a<b AND b=c) AND a=5
    ·  -> b>5 AND b=c AND a=53.去除常量条件(由于常量重叠需要):
    ·(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
    ·  -> B=5 OR B=6
      

  5.   

    1,比较好,先在程序端变量一次结果,在查询,建议使用
    2,子语句查询,效率低,并且完全不走索引,数据量大时,查询会很慢,不建议使用
    3,连表查询效率也可行,数据量大时,建议用left join来连表
      

  6.   

    1,比较好,先在程序端变量一次结果,在查询,建议使用
    2,子语句查询,效率低,并且完全不走索引,数据量大时,查询会很慢,不建议使用
    3,连表查询效率也可行,数据量大时,建议用left join来连表