Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql:在.NET/Connector中使用准备好的语句调用存储过程会更快吗?_C#_.net_Mysql_Sql_Prepared Statement - Fatal编程技术网

C# MySql:在.NET/Connector中使用准备好的语句调用存储过程会更快吗?

C# MySql:在.NET/Connector中使用准备好的语句调用存储过程会更快吗?,c#,.net,mysql,sql,prepared-statement,C#,.net,Mysql,Sql,Prepared Statement,我已经读了一些关于MySql的预处理语句的内容,而.NET/Connector确实支持它们 我想知道的是,如果我使用一个prepared语句调用同一个存储过程数千次,是否比不使用prepared语句调用同一个存储过程更快或更好的性能(因为存储过程应该已经编译了) 例如: var mySqlCmd=new MySqlCommand(con,“调用sp_someProcedure(@param1,@param2);”); mySqlCmd.Prepare(); mySqlCmd.Parameters

我已经读了一些关于MySql的预处理语句的内容,而.NET/Connector确实支持它们

我想知道的是,如果我使用一个prepared语句调用同一个存储过程数千次,是否比不使用prepared语句调用同一个存储过程更快或更好的性能(因为存储过程应该已经编译了)

例如:

var mySqlCmd=new MySqlCommand(con,“调用sp_someProcedure(@param1,@param2);”);
mySqlCmd.Prepare();
mySqlCmd.Parameters.AddWithValue(“@param1”,”);
mySqlCmd.Parameters.AddWithValue(“@param2”,“”);
对于(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,然后将其插入模板并执行

数据库中已存在存储过程。在创建过程中已对其进行了分析和验证。存储过程有点像上面提到的模板,但它是数据库的永久特性,而不是临时特性


因此,要执行存储过程,您只需将参数传递给它,而无需进行准备。

MySQL中的存储过程在每次唯一连接的第一次调用之前都不会进行编译。但在MySQL中,使用准备好的语句确定字段的数据类型并不是它的优点之一(通过与数据库通信)并适当地转义它?
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();
}