MySQL中存储过程的优缺点有哪些

  介绍

这篇文章给大家介绍MySQL中存储过程的优缺点有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。


存储过程可以有效提高SQL语句的复用率,并且可以将相关的一组SQL放入到存储过程中,从而避免了应用程序的多次查询带来的与MySQL服务器的连接延迟和占用的网络资源。下面是一个存储过程的示例,用于传入一个id来删除指定id的学生,并同时删除扩展表中的学生信息。通过这种方式就可以处理相关联的数据,而不需要应用程序分两次SQL操作。

DROP  PROCEDURE  IF  EXISTS  delete_student_by_id;      delimiter  $ $      CREATE  PROCEDURE  delete_student_by_id (p_id 拷贝;INT)   开始   DELETE 得到t_students   WHERE 才能;id =, p_id;   ,,,,,   DELETE 才能得到t_students_info   WHERE 才能;student_id =, p_id;   结束   $ $   ,,,,   delimiter ;

总的来说,存储过程有如下的优点:

<李>

直接在数据库层运行,从而减少网络带宽的占用和减少查询任务执行的延迟。

<李>

提高了代码的复用性和可维护性,可以聚合业务规则,加强一致性并提高安全性。

<李>

可以带来安全性优势以及优雅的权限控制手段。一个典型的例子就是银行中的转账存储过程。存储过程在一个事务里完成转账及记录用于后续审核的完整操作日志。可以通过存储过程完成访问而无需对涉及到的表进行提权。

<李>

服务端会缓存存储过程的执行,这样可以减少重复执行的负荷。

<李>

存储过程存储在服务端,因此对于服务单的部署,备份和维护而言,存储过程更好维护。

<李>

可以将应用开发者与数据库开发者的工作分离,因此可以让数据库牛人来写存储过程,而避免某些应用开发者编写SQL水平不高的问题。

当然,有利必有弊,存储过程也会存在一些缺陷:

<李>

MySQL没有提供好的开发和调试工具,因此存储过程的调试相对来说不那么容易。

<李>

SQL语言本身的效率没有应用程序的编程语言效率高,且相对更初级。因此,难以处理复杂的业务。

<李>

存储过程也可能增加应用部署的复杂度,不单单需要部署应用代码和数据库表,还需要部署存储过程。

<李>

每个连接的存储过程的执行计划缓存是各自独立的。如果有很多连接调用同一个存储过程,反复地缓存会造成资源的浪费。

<李>

存储过程将运行符合转移到了数据库服务器,这会导致数据库服务器的扩容更难,且比应用服务器的扩容代价更高。

<李>

存储过程占用的资源难以控制,如果发生一个bug可能导致服务器宕机。

<李>

存储过程的代码很难解读,如果单纯地调电话用XYZ(& # 39;一个# 39;)这种形式调用存储过程的话,很难分析慢查询日志。因为,这需要找到存储过程的代码并且检查里面的语句。

<李>

对于语句级的binlog或复制,使用存储过程可能会有很多陷阱导致无法使用存储过程,除非严格检查排除潜在的问题。

因此,通常,需要保持存储过程小巧简洁,以避免上述的缺陷。当然,在某些操作时,存储过程会运行得更快,尤其是在存储过程中使用循环完成多个小查询。如果查询足够小,解析SQL语句和网络通信则变成了工作负荷过高的重要因素。这个时候存储过程的优势就会被突显出来。以下面的存储过程代码为例:

DROP  PROCEDURE  IF  EXISTS  insert_many_rows;      delemiter //CREATE  PROCEDURE  insert_many_rows (loops 拷贝;INT)   开始   DECLARE  v1  INT;   SET 才能v1=循环;   WHILE 才能;v1 祝辞,0,   ,,INSERT  INTO  test_table 值(空,,0,   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,& # 39;aaaaaaaaaaaabbbbbbbbbb& # 39;   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,& # 39;aaaaaaaaaaaabbbbbbbbbb& # 39;);   ,,,SET  v1=v1-1;   最终获得才能;;   结束//delemiter ;

关于MySQL中存储过程的优缺点有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

MySQL中存储过程的优缺点有哪些