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

Я немного читал о подготовленных выражениях с 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();
}

1 Ответ

6 голосов
/ 12 января 2011

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

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

Следовательно, для выполнения хранимой процедуры вам нужно только передать ей параметры - вам не нужно готовитьэто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...