Code Bye

mysql 存储过程效率

有一个查询语句会经常调用,这个查询是使用Prepared Statements还是存储过程?Prepared Statements的并发效率比存储过程高?有一个业务涉及到多个表的不同查询,适合写成一个存储过程?什么时候该用存储过程?
解决方案

30

引用

有一个查询语句会经常调用,这个查询是使用Prepared Statements还是存储过程?

假如仅是个简单的SQL语句,则直接写SQL语句,即不用PREPARE也不用存储过程。 存储过程会比PREPARE要快一点,非常有限的一点。

引用

Prepared Statements的并发效率比存储过程高?

无此定论。

引用

有一个业务涉及到多个表的不同查询,适合写成一个存储过程?

不适合

引用

什么时候该用存储过程?

非常复杂的逻辑,并且不希望有太多数据库访问上的压力。

10

1、语句就可以了
2、prepare statements并发不一定比存储过程高。
3、不适合
4、复杂逻辑,可以考虑存储过程。

20

引用 3 楼 a19860903 的回复:
引用

假如仅是个简单的SQL语句,则直接写SQL语句,即不用PREPARE也不用存储过程。 存储过程会比PREPARE要快一点,非常有限的一点

假设要查询图片的宽高信息,本人测试发现Prepared Statements的并发效率比存储过程高

这些都没有定论。
但是可以肯定的时候,一般的动态语句的效率,都要比存储过程的效率高。
一般来说,预处理的语句都是动态拼接的语句,里面都包含了实际的值,虽然预处理是为了语句的重复使用,从而减少sql解析的开销,不过原因是是实际的语句,一般生成的执行计划效率比较高。
而存储过程本身就是有名字的,直接就可以复用,也就是 编译一次,多次运行,所以也减少了当并发高时,在解析sql上的开销,不过问题在于一般存储过程时通过参数传入值,然后再运行,所以在没有传入值时,存储过程已经编译好了,所以生成的执行计划一般比较折中,效率一般不会太差,也不是太好。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 存储过程效率