请教下大家,如果数据表里有太多数据,比如几十万条,怎么样提高查询的性能?或者说下ADO.net里是否也有一些方法提高性能?

解决方案 »

  1.   

    一般查询条件里用到的字段建立索引,exists代替in,not exists代替not in,
    关联的表不要太多,适当的地方可使用子查询代替联合查询太多了,呵呵,自已baidu下吧
      

  2.   

    1、NOT IN操作符不能应用表的索引,建议用NOT EXISTS 或(外连接+判断为空)方案代替
    2、UNION比union all多做了一步distinct操作。能用union all的情况下尽量不用union。 
    3、3、查询时尽量不要返回不需要的行、列
    4、尽量少用视图,它的效率低
    5、创建合理的索引,对于插入或者修改比较频繁的表,尽量慎用索引
    6、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围
    7、大表查询WHERE后面的条件顺序影响,尽量将范围小的条件放在前面
    8、没有必要时不要用DISTINCT和ORDER BY
    9、使用in时,在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,这样可以减 少判断的次数 
    10、不要在事物使用SELECT INTO时,它会锁住系统表(sysobjects,sysindexes等等),阻塞其他的连接的存取11、一次更新多条记录比分多次更新每次一条快,就是说批处理好
    12、慎用临时表,临时表存储于tempdb库中,操作临时表时,会引起跨库操作。尽量用结果集和表变量来代替它。 
    13、不要在一段SQL或者存储过程中多次使用相同的函数或相同的查询语句,这样比较浪费资源,建议将结果放在变量里再调用……
    还有很多,多看看大牛们的一些经验和建议。共同学习
      

  3.   

    数据量不大,一般几十万数据如果中等复杂程度的查询需要10分钟,那么要考虑优化了,如果几分钟就能查出来,就还没必要,优化的确可以写一本书,如果你有基础,可以看看2005技术内幕里面的优化那一本书。另外,ADO.NET好像提供的是缓存来加快速度吧。但是一般都是从数据库层面去解决。另外,前端程序瓶颈往往在加载大数据量的地方,有些应用的确不允许分页而直接加载十万百万的数据,这些地方要重点优化
      

  4.   

    二楼和四楼太狠了,把主要的都给说了,让后面的我们怎么拿分吗……太黑了……
    我们这里稍微说一下几个比较常用的
    exists 代替 in
    用子查询
    建立索引
    使用存贮过程
    不要使用游标
    尽量不要使用dinstinct