MySql: Будет ли использование подготовленных операторов для вызова хранимой процедуры быстрее с .NET/Connector?

Я немного читал о подготовленных операторах с MySql, и .NET/Connector их поддерживает.

Мне интересно, если я использую подготовленный оператор для вызова одной и той же хранимой процедуры тысячи раз, будет ли это более быстрой или лучшей производительностью, чем не использовать для этого подготовленные операторы (поскольку хранимая процедура действительно должна быть уже скомпилирована)?

Eg:

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();
}

person Redth    schedule 11.01.2011    source источник
comment
Хранимые процедуры в MySQL не компилируются до их первого вызова во время каждого уникального соединения.   -  person Anthony Rutledge    schedule 18.01.2015


Ответы (1)


Подготовленный оператор требует минимум 2 вызовов db. Первый вызов (подготовка) принимает оператор SQL на уровне приложения, например. выберите * из пользователей, где user_id = ? и создает шаблон запроса в базе данных, который затем анализируется и проверяется. Последующие вызовы просто включают передачу значений из уровня вашего приложения в базу данных, которые затем вставляются в шаблон и выполняются.

Хранимая процедура уже существует в базе данных. Он был проанализирован и проверен во время создания. Хранимая процедура немного похожа на шаблон, упомянутый выше, но это постоянная функция базы данных, а не временная.

Следовательно, чтобы выполнить хранимую процедуру, вам нужно только передать ей параметры — вам не нужно ее подготавливать.

person Jon Black    schedule 11.01.2011
comment
Но разве в MySQL одним из преимуществ использования подготовленных операторов не является то, что они определяют тип данных поля (путем связи с базой данных) и соответствующим образом экранируют его? - person Anthony Rutledge; 18.01.2015