日期:2014-05-16  浏览次数:20766 次

mysql查询效率比较
有一个表用来存储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"

请问这三种方法中哪种查询效率最高呢

------解决方案--------------------
mysql中1 3效率一样,都没问题 2是禁止使用的
------解决方案--------------------
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=5

3.去除常量条件(由于常量重叠需要):
·(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
· -> B=5 OR B=6
------解决方案--------------------
1,比较好,先在程序端变量一次结果,在查询,建议使用
2,子语句查询,效率低,并且完全不走索引,数据量大时,查询会很慢,不建议使用
3,连表查询效率也可行,数据量大时,建议用left join来连表