SQL查询主要功能是告诉数据库系统自己要什么数据,然后数据库系统就会寻找最好的方法来找到这些数据。因此我们需要协助数据库找到这个最优的查询方案。通过SQL的优化,在一定程度上提高数据库系统对SQL语句的理解以及作出最优执行计划的制定。
1.使用WHERE语句,显然这是很简单一种方式,明确告知数据库系统需要查询的数据,在WHERE语句中应该避免使用函数,以免增加多余的执行时间。
2.使用表连接而不是多个查询,选择连接顺序,把行较少的表连接到后面,避免从复杂的视图查询。
3.连接查询时使用完全限定的列引用,以免数据库搜索连接表的每列。
4.使用CASE表达式而不是多个查询,可以将多个查询合并为一个查询。在CASE中可以使用不同的函数来进行业务的处理。
5.表索引。一条经验是:当单个查询检索的行数不大于表总行数的10%时,建立索引是有用的。索引的候选列应该用于存储范围广泛的值,好的索引应该是对于每个记录包含唯一值的列。Oracle会为主键和唯一约束自动创建索引。
6.尽量使用WHERE而不是HAVING。一个用来过滤行,一个用来过滤行组,行被分组后才进行行组过滤。
7.使用UNION ALL 而不是UNION 。前者得到所有行(包括重复行),后者获得不重复行,删除重复行需要时间(UNION)。
8.EXISTS rather than IN,这个理论分析:EXISTS检查行的存在,IN检查具体的值,所以在子查询中EXISTS应该比IN的性能好,但是实际的查询测试好像是相差不大。
9.EXISTS  rather than DISTINCT 前者检查行的存在,后者禁止重复行的显示。初看两者没什么联系,但是可以用于一样的查询。比如查询卖出去的商品信息,一个SALES表,一个PRODUCTS表。DISTINCT过滤重复行前需要排序检索到的行。
10.复用缓存语句。条件:a 所有字符必须相同 b 字母大小写相同 c 使用的空格相同。如果需要在语句中提供不同的列值,可以使用绑定变量,而不是常量列值。
 
以上只是对于查询来言,对于不同的业务实现还是需要不同的语句,执行的时间只是一个参考,优化应该是基于正常的业务的。