sql 优化杂谈

来源:互联网 发布:windows whistler.img 编辑:程序博客网 时间:2024/06/06 05:42

1、union:对两个结果集进行并集操作,去重,按照默认规则排序

2、union all:对两个结果集并集操作,不去重,不排序

3、intersect:对两个结果集进行交集操作,去重,按照默认规则排序

4、minus:对两个结果集进行差操作,去重,按照默认规则排序

5、or:满足两个条件的并集,不去重,不排序

经以上的总结得出以下结论:

1、如果or字段是索引字段,那么使用union all代替or操作,可以走索引

2、如果能用union all ,尽量不要用union,相当于想distinct又执行了order by

3、这里所说的默认排序规则是按照select后边的字段顺序排序的,先按照第一个字段排序,如果第一个字段相同,就按照第二个字段排序


从SQL执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:
SQL试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。 推荐在业务密集的SQL当中尽量不采用IN操作符
NOT IN 此操作是强列推荐不使用的,因为它不能应用表的索引。推荐用NOT EXISTS 或(外连接+判断为空)方案代替

0 0
原创粉丝点击