我一直在阅读有关使用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语句,例如从user_id =?的用户中选择*?并在数据库中创建一个查询模板,然后进行解析和验证.后续调用只涉及将值从应用程序层传递到db,然后将其插入到模板中并执行.
数据库中已存在存储过程.它在创建过程中已经过解析和验证.存储过程有点像上面提到的模板,但它是数据库的永久特性而不是临时特征.
因此,要执行存储过程,您只需要传递它params – 您不需要准备它.
标签:sql,mysql,net,prepared-statement,c-2
来源: https://codeday.me/bug/20191008/1874412.html