|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用一个库#bak_database存放这些历史数据。传言1:存储历程要比SQL代码实行效力更高
SQL是一种言语,用来声明在数据库上想要实行的操纵(查询,更新或办理等)。数据库引擎失掉的均是文本,就像C#源代码要由编译器处置一样,SQL源码也要必需经由过程某种体例的编译,以便天生一系列的底层数据库操纵,这个输入就叫着实行企图。从观点角度思索,天生实行企图的历程能够看作是程序编译的历程。
所谓的存储历程要比一般SQL有功能提拔表现在对实行企图的重用上。换句话说,第一实行存储历程时,数据库将天生实行企图。然后实行代码。下一次实行的时分便可重用后面已天生的实行企图,因而效力上会有进步。一切的SQL命令都必要实行企图。
这个(毛病的)集会声明,数据库仅会重用存储历程的实行企图。不外在SQLServer和Oracle数据库(我们对别的产物也其实不非常的懂得)中,主要实行企图将会使用就任何SQL语句上。上面是SQLServer2005在线文档中的一段援用。
在SQLServer2005实行任何SQL语句时,干系引擎起首检察缓存,判别个中是不是有以后SQL的实行企图。SQLServer2005将重用任何可行的实行企图,以便减小从头编译SQL语句对功能上的影响。若没有找到现有的实行企图,SQLServer2005才会为以后查询天生新的实行企图。
因而,以后夸大存储历程要比复杂的SQL代码更高效的争辩就没有任何意义了。从功能角度思索,一切到达数据库的SQL代码城市被一律看待,编译以后,两者功能没有任何不同,这就是结论。
传言2:存储历程能够用来反对SQL注进打击
这个传言和后面有关功能的传言有些类似。存储历程固然能够下降SQL注进产生的大概性,由于存储历程利用强范例参数。因而关于打击者来讲,很难在必要数字的中央传进字符串,反之亦然。
参数化查询也供应了一样的功效,比方,ADO.NET就对创立参数化查询供应了很好的撑持,且ADO.NET被普遍使用于.NET平台上的良多数据库中,包含EntityFrameword,NHibernate和别的O/RM中。利用参数机关的SQL语句也能够和存储历程一样反对SQL注进打击。
(本文摘自:Microsoft.NET企业级使用架构计划)mysql的prepare其实是本地PHP客户端模拟的,并没有根据你mysql的设置做字符集的调整。应该交与mysqlserver端做prepare,同时得调用mysql_set_character_set去操作,server才会按照字符集去做转义。 |
|