Heim >Datenbank >MySQL-Tutorial >辛星解读mysql中的存储过程的优劣_MySQL

辛星解读mysql中的存储过程的优劣_MySQL

WBOY
WBOYOriginal
2016-06-01 13:02:121001Durchsuche

我们常用的SQL语句在执行的时候需要首先进行编译,然后执行,而存储过程则是一组为了完成特定功能的SQL语句集,它直接编译好了存储在数据库中,用户通过指定存储过程的名字即可调用该存储过程。

存储过程的优点主要包括以下几点:

第一点,性能提高。这是相对于不适用存储过程来说的,因为存储过程在创建的时候就编译好了,而后每次调用都不会再次编译,这相对于传统的SQL语句中每次调用都需要编译的情况来说,性能提高了何止一点两点。

第二点,重用性强。存储过程使用名字即可使用,也就是传说中的“一次编写,随便调用”。这样不仅提高了重用性,还减少了出错的几率,也会加快开发速度,可以说是一件非常好的事情。

第三点,减少网络流量。这一点对于小数据量的时候一般体现不出来,那么当数据量较大的时候,我们会发现由于使用存储过程比使用SQL语句会使用更少的字节数,因此它会降低传输的数据量。

第四点,安全性提高。由于存储过程也可以使用权限控制,而且参数化的存储过程可以防止SQL注入攻击,也在一定程度上保证了安全性。

第五点,灵活性增强。由于存储过程可以使用流程控制语句来编写,导致它有着很强的灵活性,可以根据实际情况来执行不同的SQL语句,而不是只能单纯的简单的执行命令。而且该存储过程还可以修改其逻辑而其他部分不用改变,也就是说,我们的表的结构改变了,我们只需要修改相应的存储过程即可,我们的Java或者PHP等程序不需要改变。

第六点,当业务复杂的时候,存储过程会减少工作量,为什么呢,原因很简单,如果我们不适用存储过程,那么就会导致我们先从数据库中取出来数据,然后经过计算,再放入到数据库中,这个开销还是蛮大的,这中间的开销包括我们的Java或者PHP程序连接数据库获取结果集等若干操作,如果我们使用了存储过程,那么就没有那么多事了,直接在mysql内就搞定了。

好,上面说完了存储过程的优点,当然存储过程也肯定有它的缺点,下面是它的几个缺点:

第一点,工作量加大。这里并不是说我们把程序该做的事让mysql去做不好,而是mysql本身并没有很像样的IDE来开发我们的存储过程,我们很多时候还是需要手写,这样就会比较麻烦,而且存储过程的调试也是一个问题,没有很像样的调试工具。

第二点,优势不明显。运行速度上,对于大多数的语句缓存来说,编译sql的时间开销并不是很大,但是执行存储过程还需要检查权限等一些其他开销,所以,对于很简单的sql,存储过程并没有很大优势。

第三点,赘余功能。对web程序来说,我们连接数据库的用户往往就是同一个,不需要太多的安全机制,所以,对于安全上的检测看上去很好,实际上优点多余。

第四点,小型程序完全无用。对于小型web应用来说,它的使用价值就更小了,反而会拖累开发进度。

第五点,对于运维上。当我们的程序要更换数据库的时候,它的移植性相对于不适用存储过程要复杂一些,对于维护上,由于是在db端,因此比server端的程序更好维护一些。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn