栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

优化对未知数据库的查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

优化对未知数据库的查询

一般来说,任何事情

SELECt * FROM
都是不好的做法,但它也可能导致您不得不撤回比实际需要更多的数据。转换仅对几列进行操作,返回的列数比要求的多吗?考虑替换为:

  private IEnumerable<Respondent> getListRespondentWithStatuts(string db)  {    return query("select ResRespondent, ResActive, ResCodeResult, Resphone, ResCompleted  from " + db + ".dbo.respondent");  }

此外,防止 SQL 注入攻击;为 SQL 查询连接字符串是非常危险的。

从 DataReader 中提取数据时,我发现使用非命名查找效果最好:

  var respondent = new Respondent  {    CodeRépondant = sqlDataReader.GetString(0),    IsActive = sqlDataReader.IsDBNull(1) ? (Boolean?)null : sqlDataReader.GetBoolean(1),    CodeRésultat = sqlDataReader.GetString(2),    Téléphone = sqlDataReader.GetString(3),    IsUnContactFinal = sqlDataReader.IsDBNull(4) ? (Boolean?)null : sqlDataReader.GetBoolean(4)  };

我已经很久没有明确测试性能差异了;但这曾经产生了显着的差异。序数检查不必进行命名查找,也避免了装箱/拆箱值。

除此之外,没有更多信息很难说......你需要所有20,000条记录吗?

更新

运行一个包含 300,000 条记录的简单本地测试用例,并将加载所有数据的时间减少了近 50%。我想这些结果会因检索的数据类型而异;但它仍然对整体执行时间产生影响。话虽如此,在我的环境中,我们正在谈论从 650 毫秒下降到 300 毫秒多一点。

笔记

如果

respondent
是视图,则可能“非常慢”的是数据库构建结果集;尽管数据读取器会在记录可用时立即开始处理信息,但最终的瓶颈将是数据库本身和/或网络延迟。除了上述优化之外,除非您可以索引视图/表以优化查询和/或减少所需的信息,否则您对代码无能为力。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/514633.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号