MySql:使用.NET / Connector,使用Prepared语句调用存储过程会更快吗?

我一直在阅读有关使用MySql的Prepared语句,并且.NET / Connector确实支持它们。

我想知道的是,如果我使用预准备语句来调用相同的存储过程数千次,那么是否比使用预准备语句更快或更好的性能(因为存储过程应该真的已经编译)?

例如:

var mySqlCmd = new MySqlCommand(con, "call sp_someProcedure(@param1, @param2);"); mySqlCmd.Prepare(); mySqlCmd.Parameters.AddWithValue("@param1", ""); mySqlCmd.Parameters.AddWithValue("@param2", ""); for (int i = 0; i < 1000; i++) { mySqlCmd.Parameters["@param1"].Value = i.ToString(); mySqlCmd.Parameters["@param2"].Value = i.ToString(); mySqlCmd.ExecuteNonQuery(); } 

准备好的声明需要至少2个db调用。 第一个调用(prepare)接受你的应用程序级别sql语句,例如select * from users user_id =? 并在数据库中创建一个查询模板,然后进行解析和validation。 后续调用只涉及将值从应用程序层传递到db,然后将其插入到模板中并执行。

数据库中已存在存储过程。 它在创建过程中已经过解析和validation。 存储过程有点像上面提到的模板,但它是数据库的永久特性而不是临时特征。

因此,要执行存储过程,您只需要传递它params – 您不需要准备它。