oracle的SQL优化

来源:互联网 发布:java servlet生命周期 编辑:程序博客网 时间:2024/06/07 09:06


非优化sqlA

SELECT * FROM NDMP_ISSUE_TASK T

WHERE T.VALID_CODE = '$VALID_CODE$'

优化sqlB

SELECT * FROM NDMP_ISSUE_TASK T

WHERE T.VALID_CODE =#VALID_CODE:VARCHAR#

 

ibatis/mybatis中,执行sql使用的是PreparedStatementsql预编译的处理方式),在上述两条sql中,处理过程并不一致。以传入参数VALID_CODE :A123为例,sqlA执行sql:

SELECT * FROM NDMP_ISSUE_TASK T

WHERET.VALID_CODE = 'A123'

sqlB执行sql:

SELECT * FROM NDMP_ISSUE_TASK T

WHERET.VALID_CODE = ?

Oracle执行该sql的时候,先从sql池中寻找是否有该sql,如果找到,则直接执行,否则先预编译该sql,再执行并放入sql池。很明显,在不同参数多次执行的时候,sqlA是明显没法在sql池中找到的,但是sqlB可以找到,所以sqlB就少了预编译的过程,也就是可以一次编译,N次执行,明显提高处理过程效率(在大批量执行下,预计20-50倍的性能优化)

LIKE优化

TABLE.COLUMN LIKE ‘%$value$%’

优化后

TABLE.COLUMN LIKE CONCAT(‘%’,CONCAT(value:VARCHAR,’%’))

或者

TABLE.COLUMN LIKE CONCAT(CONCAT(#value:VARCHAR#,‘%’),’%’)

0 0
原创粉丝点击