dataAdapter.Fill(dt)慢

zestsnake 2018-06-23 08:43:00
同样是返回2W多的记录,一个SQL语句中用了"in" ,一个没有。
用了in的,需要20多秒,没有用的,几乎是秒出。奇怪的是,在SQLSERVER 中调试,速度都挺快。
...全文
585 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_27549073 2018-07-04
  • 打赏
  • 举报
回复
in 只是基本语法,是不可避免的,使用in在大部分时候比能实现相同需求的连表方法来的快。
baidu_27549073 2018-07-04
  • 打赏
  • 举报
回复
in 只能使用在有索引的字段上
帅得 掉渣 2018-06-24
  • 打赏
  • 举报
回复
in的效率确实很差,在oracle里也是如此, 如果用临时表,应该快很多
zestsnake 2018-06-24
  • 打赏
  • 举报
回复
差了大约20秒,关联字段也有索引
  • 打赏
  • 举报
回复
当(在sql server查询分析器上)分页查询时比较“快”,并不能说明你的 sql 查询以及数据库表建模是合理的。相反地,很可能恰好说明它不合理。

正常情况下,分页查询200条记录跟查询2w条记录的速度差不多(只不过是序列化到客户端并且绑定界面 UI 显示的速度差比较多)。假设你发现差别比较大,比如说差几百上千倍速度,那么就一定是你没有用到索引。
  • 打赏
  • 举报
回复
在sql server 查询分析器上查询,它默认地做了 top n 操作,例如只取得前200个记录,那么就会快100倍。
圣殿骑士18 2018-06-24
  • 打赏
  • 举报
回复
把sql查询计划贴出来。不是你有索引就能用的,说不定你索引定义的不对呢
exception92 2018-06-23
  • 打赏
  • 举报
回复
in本身都比较耗时,可以通过在匹配列上建立索引来提高查询效率。仅在数据库执行 不会有l/O操作,数据库通过选择最优的查询计划来执行语句所以会显示比较快。
需要.net4平台,引用之后,访问工具类示例: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Security.Cryptography; using System.IO; using Oracle.ManagedDataAccess.Client; namespace DBconnection { public class DBHelper { /// /// 读取数据库连接 /// public static readonly string OracleConnectionStr = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.9.211)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=HIS)));Persist Security Info=True;User ID=ZLHIS;Password=o15ntu;"; /// /// 集合查询:在此完成所有的集合类型查询 /// /// 查询语句 /// 结果集合 public static DataSet OracleFillTable(string sqlQuery) { using (OracleConnection con = new OracleConnection(OracleConnectionStr)) { //创建数据适配器,将查询语句及连接字符串两个参数传进数据适配器 con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = sqlQuery; //新建一个表格对象dt,用来获取查询的数据 DataSet ds = new DataSet(); try { //填充表格 OracleDataAdapter oda = new OracleDataAdapter(cmd); oda.Fill(ds); //如果查询无误,则返回查询出的数据 return ds; } catch { //执行查询出现错误,返回null值 return null; } finally { //主动销毁所用的资源 ds.Dispose(); cmd.Dispose(); // 关闭连接 con.Close(); } } } /// /// 集合查询:在此完成所有的集合类型查询 /// /// 查询语句 /// 结果集合 public static string OracleGetTable(string sqlQuery) { string result = null; try { using (OracleConnection con = new OracleConnection(OracleConnectionStr)) { OracleCommand cmd = con.CreateCommand(); try { con.Open(); cmd.CommandText = sqlQuery; try { //执行sql语句 result = cmd.ExecuteScalar().ToString(); } catch { result = "-1"; } } catch (Exception e) { throw new Exception("数据库连接出现错误!"); } finally { //主动销毁资源 cmd.Dispose(); // 关闭连接 con.Close(); } } } catch (Exception e) { // MessageBox.Show(e.ToString()); } return result; } } }

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧