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

标签 c# .net mysql sql prepared-statement

我已经阅读了一些有关 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/

相关文章:

c# - .Net Nest Elastic搜索-如何使用文档获取索引名称

c# - 如何解决 "The WebHook verification request must contain a ' 代码的查询参数。”在 ASP.NET WebHook 接收器中?

c# - 调用 Assert.IsInstanceOfType 时如何排除祖先?

c# - 用一个字符替换字符串中的整个字符

c# - 在 MSIL 反编译方面,SecureString 会给我带来任何优势吗?

javascript - 创建路由 Express.js 和 MySql

mysql - 在 MySQL 中使用什么数据类型来存储图像?

php - 使用 PHP、ajax、jQuery 在 Mysql 中动态创建表

c# - 通过后续索引扫描二维数组并不总是更快吗?

c# - 如何从 Excel udf 返回数组?