使用的是DataTable中的Select方法进行查询。
现在有个问题,就是需要查询两个表才能检索到一条记录。
由于不能使用join这种类似数据库的方法,所以只有先查出一个表的数据然后作循环查另一个表。
因此效率很低。
不知道大家有什么好的方法?现在系统做产品测试,转成数据库的方法就不要提了,风险太大,被否决了。
我现在只想知道时候还有优化的可能

解决方案 »

  1.   

    一直都只有使用个表的Select,没有使用过多表的联合查询。DataSet里面不也有表的关联,不知道这个关联是只有约束关联。还是具有字段关联的作用?学习学习
      

  2.   

    有个想法(只是想法,没有试过,也不知道楼主的关联查询具体是复杂到什么程度的)
    我在SQL查询分析器中看两表关联的查询语句的执行计划也是分两次扫描,先找出表1中符合条件的行再去表2中扫描匹配的行。那你在DataTable中可以按照这个思路这样试试,先在表1中查询出符合条件的行,然后根据这些行的数据动态生成查询表2所需要的SQL语句,在去表2执行,可能效率会高一些吧
    比如两个表A,B要查询 这样的语句select B.* from A,B where A.id = B.id and A.id > 5 and B.id  < 20可以先这样查询A,select id from A where id > 5,假如查询出符合条件的id有3个(6,7,10)
    再生成查询B的SQL,select B.* from B where id < 20 and id in(6,7,10)查询得到最后的结果
      

  3.   

    在DataSet中搜索数据   在一个数据集中查询符合特定条件的行时,使用基于索引(index-based)的查看表将提高性能。给数据表指定主键(PrimaryKey)值时,就建立了一个索引。当为数据表建立数据视图(DataView)时也建立了索引。下面是一些使用基于索引查看的技巧:   如果查询是在数据表的主键列上进行的,使用DataTable.Rows.Find代替DataTable.Select。   查询非主键列,可以使用数据视图来提高多个数据查询的速度。当给数据视图添加排序时,将建立搜索时使用的索引。数据视图暴露了查询下层数据表的Find和FindRows方法。   如果你不是查询表的排序视图,也可以通过为数据表建立数据视图获得基于索引的查看表的好处。注意如果你执行数据上的多个查询这是唯一的好处。如果你只执行单个查询,需要建立索引的过程将因为使用索引而降低了性能。   数据视图(DataView)结构   当数据视图建立后,并且当Sort、RowFilter或RowStateFilter或者属性被修改时,数据视图为下层数据表中的数据建立索引。当建立数据视图对象时,使用把Sort、RowFilter和RowStateFilter值作为参数的数据视图构造函数。结果是建立了一次索引。建立"空"数据视图,然后设置Sort、RowFilter和RowStateFilter属性将导致至少两次建立索引。
      

  4.   

    估计没有好方法了,估计搂主的要用这种查询的地方很多 ,程序框架也已经生成了,改动也麻烦。一般也就是 先选取 符合Table1条件 的 ID  ,再用in加到 Table2的 RowFilter选择条件中去。 不过效率就这样了,。反正数据也是已经取好了,在内存中运算,也应该慢不到哪去啊 。
      

  5.   

    DataView是很好的数据组件,速度飞快!