SQL 查询效率

1.UNION ALL 连接两个结果表的内容,全部融合。

UNION 则是distinct UNION ALL后的结果。

2.JOIN,用大结果表去join小结果表的效率远远高于用小结果表去JOin大结果表。

3.如果tab2中记录数明显高于tab1,用
SELECT COUNT(*) FROM tab2, tab1
效率明显优于
SELECT COUNT(*) FROM tab1, tab2

4.包含Select语句的放在Where之后。即:可以过滤掉最大数量记录的条件优先写在WHERE的末尾

5.有索引的先包含索引列。

6.in 、like、=、exists [能够用exists时,坚决不用in]

  a、如果条件字段都是非索引字段,那么效率都差不多,就看结果大小。
  b、有差别的在于条件字段是索引字段时:
=在所以的情况下都会进行索引扫描,所以效率总是高的。
like 当模糊查询为右模糊,比如'abc%'时,扫描索引,高效。
     当模糊查询含左模糊时,比如'%abc',进行全表扫描,低效。
in的作用等同于or ,也是进行索引扫描,高效。

另外,in还可以连接查询结果集,这时往往会和exists做比较。
  c、 select * from t1 where f1 in (select f1 from t2 where t2.fx='x'),

其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。

  d、 select * from t1 where f1 in (select f1 from t2 where t2.fx=t1.fx),

其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般效率不如exists,数据量大时,效果就更加明显。

posted @ 2011-10-28 08:42  流失的痕迹  阅读(458)  评论(0编辑  收藏  举报