SQL谎言

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 我们开发的是一套大型门户系统,因为是Internet访问的,所以,Statement会出现安全问题,这个在 http://blog.youkuaiyun.com/hongbo781202/archive/2005/09/19/485092.aspx里面已经讨论过了,然后我抄一段ORACLE电子杂志的话给大家看看:“除了缓冲的问题之外,至少还有一个更好的原因使我们在企业应用程序中更喜欢使用 PreparedStatement对象,那就是安全性。传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。 当处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要。传递给 PreparedStatement的字符串参数会自动被驱动器忽略。最简单的情况下,这就意味着当你的程序试着将字符串“DAngelo”插入到 VARCHAR2中时,该语句将不会识别第一个“,”,从而导致悲惨的失败。几乎很少有必要创建你自己的字符串忽略代码。 在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。”。这段话和我们群里面的讨论一模一样。 关于性能问题,再给大家看段话:“通常认为PreparedStatement 对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。 然而,在Oracle环境中,开发人员实际上有更大的灵活性。当使用 Statement或PreparedStatement对象时,Oracle数据库会缓存SQL语句以便以后使用。在一些情况下,由于驱动器自身需要额外的处理和在Java应用程序和Oracle服务器间增加的网络活动,执行PreparedStatement对象实际上会花更长的时间。” 实际上,我的测试结果是:在同一SQL执行5次的情况下,PrepareStatement比Statement要慢3%. 我们再看看http://www.oreilly.com/catalog/jorajdbc/chapter/ch19.html 里面有详细的图表说明为什么Statement比PreparedStatement快。结论是:一个prepared statement要执行65次以上才能赶上一个普通statement的执行效率。 另外一个问题就是Index的使用,基本的原则就是: 如果是多列Index,一般应该保证这几个列都在查询条件中。而且对于单列Index,只有满足查询出来的结果命中率在20%以下,使用索引会才会加快速度! 否则可能会越Index越慢哦! 根据经验看,上面的结论对Oracle,Sybase,Mysql,Informix都成立,好可怕啊,不知道我前两年的程序怎么做的,原来我前两年都是在谎言的边缘度过!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值