以下是我的SQL语句:
select a.cdm,a.vmc,b.czddm,c.djysj,c.njyje,c.njyjf,c.nzjjf,c.nzjzt,c.nlxbz from  b_shxx_shxxb a
left join b_shxx_zdxxb b on a.CDM=b.cshdm
left join b_jyxx_cjjymxb c on b.czddm=c.czddm语句后根据用户输入的条件加where 语句。我发现当数据库的记录达到4万多条的时候,程序在运行时就要等待一分多钟,我想问一下,有没有办法让结果显示的快一些?谢谢赐教!

解决方案 »

  1.   

    1.JOIN很浪费性能,能合并到一个表的就不要分表,牺牲点冗余换取性能提升,划算!
    2.建议在Where条件上增加索引,以提高性能
    3.想听取更多建议,请到SQL Server版去问高手
      

  2.   

    把它放到查询分析器里面 ctrl+lq去看看执行计划,是那里耗时多了
      

  3.   

    我用的是ORACLE数据库,在数据库里执行这条语句,不会慢,速度很快,但是放到程序里,在程序里显示的时候就慢了
      

  4.   

    ORACLE数据库 分区 索引 子查询 存储过程 都用了的话 还慢就不是数据库的问题了 这数据库处理上百万条数据是没有点问题的 
    建议楼主看下程序吧  泛型 DataReader 大量数据处理别用DataTable
      

  5.   

    上面这条语句查询出结果后,还需要再次对查询结果按a.cdm,c.djysj进行分组汇总,统计每一个a.cdm的中奖次数,中奖次数对应的字段为c.nzjzt,在该字段中存放的内容是“0”和“1”,中奖为‘0’
      

  6.   


    不用DataTable,那应该怎么处理呢?
      

  7.   

    第一次听说子查询比联接查询快(IN, EXISTS会比JOIN快 ???).左联接肯定比内联接效率低一点,但是也不会太离谱. LZ的太离谱了, 我运行几万条记录的左连接也只要几秒钟,而且比你的还复杂多了. 检查一下用于联接的字段都建了索引没有,这是关键.
      

  8.   

    DataReader 速度比DataTable快的不只一点 在配上泛型 基本你说的那几十万条没点问题
      

  9.   

    把2个on后面的关联字段做索引,另外对你的WHERE条件也做复合索引
    如果数据很多的话,会让你感觉快上很多的。。
    不知道索引的话先去看看索引的基础知识。。PS:你要是发到数据库专区去会有更专业的帮助
      

  10.   

    in 是不会调用索引的。。EXISTS到是会调用索引。。但是NOT EXISTS也是不会调用索引的。。
    要查询上W数据的时候,唯有合理的索引配置,才是唯一的优化出路
      

  11.   

    1、查询的顺序是从右往左,建议把数据少的表放在连接的最后,越精确的条件也放在where最后面.
    2、建索引.