当前位置: 移动技术网 > IT编程>数据库>MSSQL > 一次 C# 查詢數據庫 算法優化的案例

一次 C# 查詢數據庫 算法優化的案例

2018年04月13日  | 移动技术网IT编程  | 我要评论

WWW.7NXX.COM,沈阳工业大学继续教育学院,手工半成品加工

最近有次在修改某段程式時,發現一段程式算法看起來簡單。

但背後因為多次查詢數據庫,導致效能問題。

這段程式主要是利用 EPPLUS 讀取 Excel 資料,檢查資料是否已存在數據庫中,若有就將已存在的序號回傳

優化前的案例原碼如下

 //預先檢查是否有存在的編號
                string duplicateNumber = "";
                for (int row = startRow; row <= worksheet.Dimension.End.Row; row++)
                {
                    if (worksheet.Cells[row, 1].Value != null)
                    {
                        var result = Conn.QueryFirst<int>(@"
                    SELECT 1 FROM TemplateNumber 
                    WHERE SerialNumber = @SerialNumber ",
                            new
                            {
                                SerialNumber = worksheet.Cells[row, 1].Value,
                            });
                        if (result == 1)
                        {
                            duplicateNumber += worksheet.Cells[row, 1].Value;
                        }
                    }
                }

從上述可以看到,對於每一行Row的資料,都進一次庫去做查詢比對

那在這種情況要怎麼修改呢? 其實仔細想一下查詢語句的轉換就行了

List<string> querySerialNum = new List<string>();

                for (int row = startRow; row <= worksheet.Dimension.End.Row; row++)
                {
                    if (worksheet.Cells[row, 1].Value != null)
                    {
                        querySerialNum.Add(worksheet.Cells[row, 1].Value.ToString());
                    }
                }
                var result = Conn.Query<string>(@"
                    SELECT SerialNumber FROM TemplateNumber 
                    WHERE SerialNumber IN @SerialNumber ",
                    new
                    {
                        SerialNumber = querySerialNum
                    });
                if (result.Any())
                {
                    throw Exception(string.Join(";",result));
                }

可以看到這次我把 Excel 的內容先放到一個陣例裡,最後改用 IN 的方式去將已存在的資料取出

這樣原本 N 次的庫查詢動作,現在只需要 1 次庫的查詢即可

看完後是不是感覺很簡單? 各位可以查看一下同事們寫的代碼裡,是否也有出現這樣的問題唷

咱們下次見!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网