我已经阅读了一些有关 MySql 的预处理语句的内容,并且 .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 次数据库调用。第一个调用(准备)采用您的应用程序级 sql 语句,例如从 user_id = ? 的用户中选择 *并在数据库中创建一个查询模板,然后对其进行解析和验证。后续调用只需将值从应用程序层传递到数据库,然后将其插入模板并执行。
数据库中已存在存储过程。它在创建过程中已被解析和验证。存储过程有点像上面提到的模板,但它是数据库的永久功能而不是临时功能。
因此,要执行存储过程,您只需要传递参数 - 不需要准备它。
关于c# - MySql:使用 .NET/Connector 使用准备好的语句调用存储过程会更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662794/