现在小弟遇到一个很头疼的问题,就是有一个表 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表与新表的相关数据的准确性。
2、AB的关系,一对多、多对一还是多对多
select * from A join B on A.matcode =B.matcode and A.batchcode =B.batchcode
形成一个视图
对这个视图按照查询条件建立必要的索引就可以了你说的提取数据到新表的方案太过复杂,没办法的时候再考虑
A,B表的数据量都很大,B表与A表的关系是一对多
查询快不快和where有什么关系,join里本身就可以写条件。where只在需要的时候采用。
select * into #temp_table from A join B on A.matcode =B.matcode and A.batchcode =B.batchcode
select * from #temp_table where 条件
这样效率会高一些,但没有得到彻底解决
如对数字字段,按数字范围拆分,英文字母按A,b,c...z拆分
查询前先判断查询的记录属那个表,就查那个表。