把参数写在SQL里和把参数放在参数列表里的对比
本帖最后由 u011554078 于 2013-07-30 17:36:25 编辑 把参数写在SQL里和把参数放在参数列表里哪个效率高?
比如:
------------------------
int id=1;
String SQL="select name from student where id="+id;
------------------------
int id=1;
String SQL="select name from student where id=?"
List<Object> param=new ArrayList<Object>();
param.add(id);
------------------------
请对比以上两种写法的优劣(比如稳定性、效率等等)
谢谢!! SQL 效率
[解决办法]
#1.拼SQL的话,缺点:执行计划不会被重用,每次调用都会加上CUP的编译时间;优点:由于重新编译,可以根据参数的不同生成不同(更优)的执行计划。
#2.传参数的话,优点:执行计划会被重用,每次调用时不用理重新编译,节省了CPU的编译时间;缺点:在表结构,数据,索引或统计信息等没有变化的情况下,不会重新生成执行计划。对于某些表,这不是一个好事情,例如,一个表有1千万条记录,其中有1条flag=1,剩下的9999999条记录flag字段=0,对于select * from dbo.tablename where flag = 1来说,走flag索引,最快,而对于where flag=0来说,走全表扫描最快。但是如果你第一次执行时传的参数flag=1,那么第二次传参flag=0时,就会比全表扫更慢。
综上所述,建议:一般情况下,建议传参,节省编译时间,防止SQL注入;考虑到性能,或者说CPU编译时间可以忽略不讲的情况下,用拼SQL
[解决办法]
这样的两种写法效率可以说是一样的。
如果从安全性去考虑,那就是用参数传递,可以防止SQL注入。