在表中插入相关数据的速度比预期慢

0kjbasz6  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(273)

我创建了一个记录家庭成员名单的程序。
这些记录是用索引卡写的。
在索引卡上。它包含祖先及其亲属。
我有两张table
表1
有关祖先的信息,如名称、id(自动递增)、文件名、用户名(电脑中的那个)
表2
有关亲属的信息,如姓名、祖先身份证(来自表1)
有20个人在使用这个程序。所以在插入亲戚之前,我需要得到插入祖先时生成的id。
有时索引中有10个亲戚。有时有20个
这是我的存储过程

INSERT INTO tbl_ancestor(an,`as`, dd, cn, su, mm, stn, re, yy, st,  filename, username, `zipName`, `batchName`, `folderName`, `remark`) 
        VALUES(_an, _as, _dd, _cn, _su, _mm, _stn, _re, _yy, _st, _fname, _username, _zipName, _batchName, _folderName, _remark);
        SELECT ID, filename, username, zipName, batchName, foldername FROM tbl_ancestor;

但是当数据库中的记录 10000 它等待5秒钟,等待消息提示数据已保存。
我只使用select语句。因为我想如果我使用一个 linq 在我的c#代码中获取祖先的id以供亲属使用。但速度是一样的。
这是我的查询中的错误吗?
或者在我的密码里?

foreach (var item in tag.RelativeList)
{
    using (MySqlCommand cmd = new MySqlCommand("sp_insert_relative", conn)
    {
        CommandType = System.Data.CommandType.StoredProcedure
    })
    {
        if (conn.State == System.Data.ConnectionState.Closed)
            conn.Open();

        cmd.Parameters.AddWithValue("_ancestor_id", id);
        cmd.Parameters.AddWithValue("_rgn", item.RGN);
        cmd.Parameters.AddWithValue("_rsn", item.RSN);
        cmd.Parameters.AddWithValue("_sgn", item.SGN);
        cmd.Parameters.AddWithValue("_ssn", item.SN);
        cmd.Parameters.AddWithValue("_username", tag.Username);
        cmd.Parameters.AddWithValue("_fname", System.IO.Path.GetFileName(tag.FileName));
        cmd.ExecuteNonQuery();
    }
}

有什么办法解决这个问题吗?让我的程序更快?我想不出解决的办法。我也一直在找。但我找不到具体的解决办法。或者我用错了搜索关键字?

eqqqjvef

eqqqjvef1#

using (MySqlTransaction trans = conn.BeginTransaction())
          {
              foreach (var item in tag.RelativeList)
              {
        using (MySqlCommand cmd = new MySqlCommand("sp_insert_relative",conn)
        {
            CommandType = System.Data.CommandType.StoredProcedure
        })
        {
            if (conn.State == System.Data.ConnectionState.Closed)
                conn.Open();

            cmd.Parameters.AddWithValue("_ancestor_id", id);
            cmd.Parameters.AddWithValue("_rgn", item.RGN);
            cmd.Parameters.AddWithValue("_rsn", item.RSN);
            cmd.Parameters.AddWithValue("_sgn", item.SGN);
            cmd.Parameters.AddWithValue("_ssn", item.SN);
            cmd.Parameters.AddWithValue("_username", tag.Username);
            cmd.Parameters.AddWithValue("_fname", System.IO.Path.GetFileName(tag.FileName));
            cmd.ExecuteNonQuery();
        }
trans.commit
    }
}

可以使用mysqltransaction将数据插入或更新到数据库中。

相关问题