3、优化在时间成本和风险上的代价都很低;◆SQL语句可以有不同的写法;◆SQL语句易学,难精通。从大多数数据库应用系统的实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。2、查询语句(SELECT)的优化建议(1)、合理使用索引:where子句中变量顺序应与索引字键顺序相同。如:create index test_idx on test(bdh, rq, xz) 索引字键顺序:首先是保单号bdh,其次是日期rq,最后是险种xz,所以where子句变量顺序应是where bdh<=“P1234”and rq=“06/0
4、6/1999”and xz=“DAA”,不应是where xz=“DAA” and rq=“06/06/1999” and bdh <=“P1234”这样的不按索引字键顺序写法。(2)、将最具有限制性的条件放在前面,大值在前,小值在后。 如:where colA<=10000 AND colA>=1 效率高 where colA>=1 AND colA<=10000 效率低(3)、避免采用MATCHES和LIKE通配符匹配查询通配符匹配查询特别耗费时间。即使在条件字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。例如语句:SELECT * FROM custo
5、mer WHERE zipcode MATCHES “524*”可以考虑将它改为SELECT * FROM customer WHERE ZipCode<=“524999” AND ZipCode >=“524000”,则在执行查询时就会利用索引来查询,显然会大大提高速度。(4)、避免非开始的子串例如语句:SELECT * FROM customer WHERE zipcode[2,3] >“24”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。(5)、避免相关子查询一个字段的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的字段值改变之后,子查询
6、必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。例如:将下面的语句select bdh,bf from TabAwhere item IN (select item form TabB where TabB.num=50)改为:select bdh,bf from TabA, TabB where TabA.item=TabB.item AND TabB.num=50(6)、避免或简化排序 应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些