理论上讲,SQLServer为了避免SQL语句二次编译,参数化查询比拼接的SQL要快。。扯淡,那是insert时候,不用绑定变量几千万条语句编译几千万次,加了绑定变量变成一个编译结果用不同的参数调几千万次,所以才快。你一共就一条select,编译一次也就几毫秒,你能觉出来慢?把参数写死到SQL里,数据库会读到这个值,根据之前收集的数据统计信息,可能会优化查询方案(只是可能),用绑定变量则数据库只有生成查询方案后才能得到这个值,所以可能走了错误的查询方案
解决方案 »
- 求一个正则表达式或者能解决的办法
- 判断两个矩形是否相交的函数?给分了 呵呵
- java中常用到parse()这个静态的方法,是干什么的??
- 一个很奇怪的问题,同样的代码JCreator中可以运行JBuilder中确报错请大侠帮忙
- 如何解决JTree中不同结点设置不同图标?
- 大家好呀!我有一部分这样的程序,我不知道怎么调试它们,因为我是一个菜鸟,我是从一个星期前开始学的,要在一个星期后就得交论文,救救
- 如何读取pkcs7文件(.p7b)?
- 显示Progress Monitor如何屏蔽其他操作?
- 哪位兄弟有jspSmartUpload的正版源代码(不是反编译的)?发我一份吧.....(急急急)
- JSP或者Java脚本怎么得到执行时间?
- 算日期
- 求帮忙设计一下这个算法怎么写最快。
通常来说,你需要非常注意你的sql条件中对字段进行加工后的筛选,这很有可能导致数据库对全表进行一次完全扫描,例外的是如果执行计划让UserID=?优先执行,那么在过滤后的小范围内扫描,这个问题就不那么明显了!一般而言,数据库的执行计划是比较聪明的,但是也不要过于相信,有时候它也犯傻,所以重点还是分析两次执行时使用的执行计划,以上意见仅供参考,sqlserver用的少,不过概念应该可以通用的,你可以朝这个方向找找问题!
同样的查询,拼SQL语句,几乎忽略不计,然参数化查询则需要2到3秒
一秒执行上万次,还是一天上万次,还是一次上万条,你把这个搞清楚。一天上万次就不用当事。或者干脆一点,用户操作一次,你的这条SQL走几次?一百次以内,不用考虑解析带来的效率问题。按照你的描述,就一个可能:写'aaa',数据库根据统计信息,决定走索引;用?,数据库无法预知,采用全表扫描。
但从查询分析器上的'aaa'模式,走的是主键索引,这是没有问题的。
另外,这些对象也是能够重用的,没必要一次查询就创建一个新的对象。
SQL2008R2 600w记录最后结论:如果记录很少,或者仅一次查询,参数化查询的效率优势不明显,甚至可以说很差。当然这不代表可以放弃使用参数化查询,比忘了它至少很安全。