日期:2014-05-17  浏览次数:21034 次

存储过程真的比一般的SQL高效吗?
一直听说存储过程的效率高,但一直没验证过。
现在验证了一下,发现好像并不是那么回事。

测试数据库:MySQL 5.1
数据量:2W多
存储过程:单表(2W多记录)select 4列
测试方法:使用Java程序通过JDBC连接数据库,一个是使用一般的SQL语句,用Statement查询;另一个使用存储过程,用CallableStatement查询。

测试结果:
使用SQL语句的查询时间100多ms
用存储过程的查询时间超过200ms,差不多上面的2倍

问题:为什么存储过程没有体现出它的优势呢?是数据量还不够庞大吗?

------解决方案--------------------
存储过程的优点在于:1 存储过程自动把所有的字母大写.2 存储过程自动收缩空格和tab。
这样在你多次执行的时候就不会产生多个执行计划,避免了逻辑读,所以才会建议使用存储过程,至于我们的选择主要还是看业务和前期的设计
------解决方案--------------------
存储过程的一个优势是减少硬分析
------解决方案--------------------
单次查询并不能说明什么问题
------解决方案--------------------
探讨

单次查询并不能说明什么问题

------解决方案--------------------
理论上说肯定是比sql快的,因为存储过程它是编译过后的,你调用它的时候就直接用的,而sql语句还要通过mysql编译,再返回结果,编译其实也需要很多时间的。这个问题只能说你写的存储过程效率没有优化好。
------解决方案--------------------
MARK一下,看看大家的解答。
我对这个理解也不是很透彻
我觉得,为了安全性,就有用各种存储过程的必要性
------解决方案--------------------
探讨

引用:

理论上说肯定是比sql快的,因为存储过程它是编译过后的,你调用它的时候就直接用的,而sql语句还要通过mysql编译,再返回结果,编译其实也需要很多时间的。这个问题只能说你写的存储过程效率没有优化好。


我测试的存储过程,只是一个简单的select,单表
过程里包含的sql语句和我通过Statement调用的sql是完全一样的。
这样的存储过程貌似没什……

------解决方案--------------------
复杂的逻辑查询的时候你就会体会他的优越了