博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次 C# 查詢數據庫 算法優化的案例
阅读量:6902 次
发布时间:2019-06-27

本文共 1962 字,大约阅读时间需要 6 分钟。

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

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

這段程式主要是利用 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
(@" 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
querySerialNum = new List
(); 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
(@" SELECT SerialNumber FROM TemplateNumber WHERE SerialNumber IN @SerialNumber ", new { SerialNumber = querySerialNum }); if (result.Any()) { throw Exception(string.Join(";",result)); }

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

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

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

咱們下次見!

转载于:https://www.cnblogs.com/KingJaja/p/8810880.html

你可能感兴趣的文章
GRE隧道模式与IPSec传输模式构建×××
查看>>
linux命令6--touch命令
查看>>
我的友情链接
查看>>
且谈布局适配和日志框架
查看>>
在论坛中出现的比较难的sql问题:15(行转列2)
查看>>
springboot中的5种通知小例子
查看>>
mysql数据通过jdbc操作作为Spark数据源案例
查看>>
Sersync实现触发式文件同步
查看>>
shell练习题
查看>>
大型网站压力测试及优化方案
查看>>
云计算的特性有这4点
查看>>
IT兄弟连 JavaWeb教程 jQuery对AJAX的支持
查看>>
Windows SqlServer 2008服务1433端口不监听问题排查
查看>>
oracle 11g rac安装之oracle database报错解决
查看>>
linux固定用户访问ip限制
查看>>
华为SSH配置
查看>>
比较好用的dns列表
查看>>
linux下mysql的root密码忘记解决方法
查看>>
多机调度问题-贪心算法
查看>>
sql_trace的使用
查看>>