现在的位置: 首页 > 综合 > 正文

mysql API中的参数绑定问题

2013年12月08日 ⁄ 综合 ⁄ 共 781字 ⁄ 字号 评论关闭

用惯了ORACLE,用MYSQL还真不习惯。
一般来说,执行语句前,数据库引擎需要将语句翻译成执行计划,这就是典型的SQL解析过程。而且执行后的SQL会被放在缓冲区中,下次再执行同样的语句能提高性能。
对于ORACLE来说,不同的SQL太多会导致共享池耗满,产生问题。因此,使用ORACLE数据库的时候,不能将变量格式化成字符串组合成SQL,这样不但影响性能,还会影响数据库的稳定性。一般会在SQL语句中使用:name这样的格式来预留下参数的位置,执行的时候将变量绑定上去。参数绑定的方法能大大提高性能。

而MYSQL中呢?
最初使用mysql++的时候,看到Query对象中可以在SQL语句中使用%0, %1,%2这样的占位符来预留参数,然后使用parse()方法解析语句,然后在执行的时候加上变量。难道,原理和ORACLE一样,可以提高性能?

看了Mysql++的实现后,大失所望:mysql++只是方便了使用者而已,采用逐个字符解析的办法从SQL语句中提取出%0,%1等占位符,然后根据实际传入的变量组合成SQL语句,并没有提高性能…………

答案还必须到mysql的API中去寻找:终于在mysql文档的25.2.7.10节看到一个例子:使用MYSQL_STMT。文档中的例子代码就不在此处贴出来了,需要的朋友可以去这里查看:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-stmt-execute

总结下来就是:
1、MYSQL_STMT这个功能可以具备ORACLE一样的绑定变量功能;
2、照文档上说,使用MYSQL_STMT是可以提高性能的;(下一步将对比性能的差异究竟是多大)
3、占位符是问号,例如:insert into tab(a,b,c)values(?,?,?)

希望,MYSQL_STMT可以提高性能。

抱歉!评论已关闭.