利用存储历程优化Sql实行速率
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。记得刚入手下手进修Sql的时分,只晓得存储历程可以进步查询速率,却不晓得存储历程为何可以进步查询速率,觉得能写出为所欲为的存储历程真是太了不得了。转眼就过了好几年了,如今又想转头来收拾一下存储历程的长处。我们在利用Transact-SQLt时,一样平常能够用以下两种办法来存储与实行Sql命令。
1,将Sql写在程序中,程序实行时向SqlServer发送sql语句及实行命令。
2,将Sql存在SqlServer中,创立实行存储历程来处置庞大了局.
实在,我们能够将任何一组sql语句都作为存储历程存起来,只是在实践项目中,这类办法太甚于机器。
上面我们切进正题:
存储历程的基础观点。
存储历程是Transact-SQL语句的预编译汇合,如许语句在一个称号下存储并作为一个编译事后的单位处置。正由于是预编译过的,以是在实行的时分就省往了编译的工夫。
在利用存储历程有以下几点上风:
1,同意模块化程序计划:
一个功效只必要创立一次,就能够被恣意次挪用,到达重用的目点,并且能够自力于程序修正(固然,这点有益也有弊,利固然是修正起来复杂,省往程序编译公布等历程,弊固然就是平安性成绩了,由于存储历程都是明文,也就是都表露在用户的眼下,简单被修正。)
2,可以进步实行速率:
后面有讲到,数据库引擎在创立存储历程的时分就会对其举行剖析和优化,并预编译好,并且能够在初次实行该历程后利用该历程在内存中的版本,如许就省往了不IO的工夫。而假如是运程程序中的Transact-Sql,它都是从客户端发送,而且每次都要编译和优化。
3,削减收集流量
将数百行的Sql代码放到一个单位中,在实行时,只必要发送一个实行单位称号的命令,而不必要发送数百行的代码,这在收集情况中,也能够省下很多工夫。
以上只是自己对存储历程的一些意见,固然在详细的利用过程当中,存储历程的感化远远不及这些,这都必要到详细的项目中往体味了。php本地模拟的prepare底层就是mysql_real_escape_string,所以必须得用mysql_set_character_set去设置mysql->charset,否则就存在字符集问题。 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 我们学到了什么?思考问题的时候从表的角度来思考问 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。 对于微软系列的东西除了一遍遍尝试还真没有太好的办法 SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
页:
[1]