在程序中经常会写SQL从数据库中获取数据,但是如何才能提高SQL的性能,是一个值得探讨的问题,本文中将介绍常见的几种SQL调优的手段。
用一条语句来替换多条语句
1 | INSERT INTO tab_comp VALUES (item1, price1, qty1); |
可以改写成
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必须使用全表扫描的方式去匹配字符串,这将产生较大的系统负载。