高性能的mysql INSERT

时间:2014-10-31 18:31:37

标签: c# mysql asp.net mysql-connector mariadb

我目前正在重写一个旧的ASP \ ASP.NET应用程序。由于我不能完全重写,我需要按部分进行。 现在我正在将代码库从ODBC升级到.net连接器。

每次用户访问页面时都会有一个插入(或2)的功能。表现非常重要。这是INSERT数据的旧ODBC函数:

public string WriteDb(string sql)
{
    myConnection.Close();
    myConnection.Open();    
    myCommand.Connection = myConnection;
    myCommand.CommandText = sql;
    return myCommand.ExecuteNonQuery().ToString();
}

这是我正在研究的那个:

void WriteDb(string sql, ICollection<MySqlParameter> pms)
{
    using(MySqlConnection myConnection = new MySqlConnection(sConnection))
    {
        using(MySqlCommand myCommand = myConnection.CreateCommand())
        {
            myCommand.CommandText = sql;
            foreach (var p in pms)
            {
                myCommand.Parameters.Add(mySqlParameter);
                myCommand.ExecuteNonQuery();
            }
        }
    }

我担心连接池耗尽。我的功能可以改进吗?

1 个答案:

答案 0 :(得分:0)

注1 - 查询
我认为,最大的变化之一是你现在插入这样的东西:

INSERT INTO tablename (KEY, KEY) VALUES (VALUE, VALUE);
INSERT INTO tablename (KEY, KEY) VALUES (VALUE, VALUE);

但更好的插入将是:

INSERT INTO tablename (KEY, KEY) VALUES (VALUE, VALUE), (VALUE, VALUE);

这不需要2次查询和与数据库的通信,但只需1 我不知道你是否有这样的查询。但它会提高性能。

注2 - 连接
您为每个查询执行一个新的MySqlConnection。建立连接是一种沉重的方法。缓存您的连接,直到您停止使用它并在完成后关闭它,这将有很大帮助!对于您在页面上执行的所有MySQL函数,使用相同的连接可能更好。并在页面末尾关闭它。