现在小弟遇到一个很头疼的问题,就是有一个表 A,里面的数据大概是有几十W到一百W条记录,只需要查询到里面的一部分数据。例如:表A 的列名:matcode , batchcode ,digit , meno 表B 的列名:matcode ,  batchcode , cv1 ,cv2 ,cv3 需要通过A,B表的关联,提出A表中的数据。现在的做法是表  select * from A join B on A.matcode =B.matcode and A.batchcode =B.batchcode 问题:由于A表和B表的数据量都比较大,所以耗费系统资源比较多。现在有什么方法提高效率呢?(相关的索引已经建立)PS: 能否把A表的“符合要求”数据放到例外一个新表中?A表本身有删除和新增,更新操作。要保持A表与新表的相关数据的准确性。

解决方案 »

  1.   

    问题描述清楚哦1、B表数据量
    2、AB的关系,一对多、多对一还是多对多
      

  2.   

    一般做法:
    select * from A join B on A.matcode =B.matcode and A.batchcode =B.batchcode 
    形成一个视图
    对这个视图按照查询条件建立必要的索引就可以了你说的提取数据到新表的方案太过复杂,没办法的时候再考虑
      

  3.   


    A,B表的数据量都很大,B表与A表的关系是一对多
      

  4.   

    数据多,没WHERE,想如何快??
      

  5.   

    把A和B表的所要查的数据都提取出来重新建立新表,然后在原来的各表中添加的update的条件去更新新建立表的内容不就行了吗?
      

  6.   


    查询快不快和where有什么关系,join里本身就可以写条件。where只在需要的时候采用。
      

  7.   

    不要用这种查询
    select * into #temp_table from A join B on A.matcode =B.matcode and A.batchcode =B.batchcode
    select * from #temp_table where 条件
    这样效率会高一些,但没有得到彻底解决
      

  8.   

    SQL的优化已成为头等大问题了!
      

  9.   

    百万的也叫多呀小马过河,呵  上了亿可以叫,个人看法.你现在的问题是理清需求逻辑,仅查询需要的数据Where。有偿支持
      

  10.   

    如果需快速,将它按查询条件的某一个字段拆分为多个表
    如对数字字段,按数字范围拆分,英文字母按A,b,c...z拆分
    查询前先判断查询的记录属那个表,就查那个表。
      

  11.   

     用 left join  不然得出的是 哈希表 数量是自然超级大