0%

SQL调优

在程序中经常会写SQL从数据库中获取数据,但是如何才能提高SQL的性能,是一个值得探讨的问题,本文中将介绍常见的几种SQL调优的手段。

用一条语句来替换多条语句

1
2
3
INSERT INTO tab_comp VALUES (item1, price1, qty1);
INSERT INTO tab_comp VALUES (item2, price2, qty2);
INSERT INTO tab_comp VALUES (item3, price3, qty3);

可以改写成

1
INSERT INTO tab_comp VALUES (item1, price1, qty1),(item2, price2, qty2),(item3, price3, qty3);

合理使用NOT IN 和 NOT EXISTS

NOT IN 是自内向外的操作,即先得到子查询的结果,然后执行外层的循环。而NOT EXISTS恰好相反,是自外向内的操作。通常情况下NOT EXISTS的性能要高于NOT IN

调整表的连接顺序,减少中间结果集的数据量

一般情况下,DB2会根据各表的JOIN顺序自顶向下顺序处理,因此合理排列各表的连接顺序会提高查询性能。

良好的SQL编码规范

  • 在每条SQL SELECT语句的SELECT列表中只提供确实需要检索的列。
  • 在SQL中使用WHERE子句过滤数据,而不是在程序中到处过滤数据。
  • 可以使用SELECT…FETCH FIRST n ROWS ONLY来限制查询结果集的大小。
  • 尽量用数据类型相同的数据进行比较,以避免发生数据转换。
  • 正确使用LIKE运算:对于LIKE运算,如果通配符%出现在字符串的尾部或中间,LIKE运算符将可以使用索引进行字符串的匹配;如果%出现在字符串的开始,则LIKE必须使用全表扫描的方式去匹配字符串,这将产生较大的系统负载。