如题,我有一张大概1000万条数据的表,这个表的记录一个月都不会变化一次,查询语句类似num between xxx and xxx or num between xxx and xxx,每次会查询出来一批数据,暂时懂得只有SQL语句查询数据库和一次性把数据读取到DataTable中然后select,这两种方法,有没有更高效的办法?
开发语言C#,求大神赐教,服务器配置不是太大的问题,都是联想E7的服务器,内存64+
加索引应该会快一些。
用缓存比较好,上面兄弟提到的,去了解下memcache 像这种缓存机制是存储在内存中,每隔一天提取一次数据,缓存失效时间。
刚看了点memcache的资料,感觉受点启发,回来可以研究下,索引那些肯定都建了,要没索引速度慢上天,使用情况比较特殊,条件非常多
写个sql例子吧,这只是其中的一步而已,其实还要join很多表,再把查询出的数据通过一个列group by,然后再统计count,中间还有几张表是Tree结构需要做递归
select mass from TableA where mass between 1000 and 1002 and mass between 1004 and 1005...
光这个between条件就有200-800个,从这一步需要过滤出来大概100-200万条数据,然后再对这200万条数据做N步处理,把mass列做上索引,这个过程下来,全部需要大概1分钟时间,通过线程池的话还不敢开的太多
大概会查出多少数据?
实际业务要比那个语句复杂,用到多表连接以及递归查询以及通过group by 进行count计算等,最终只有10条数据,纯SQL效率不太高,我想把数据全部加载到内存中,然后通过逐步的过滤统计得到最后结果,这样会不会效率高一些
@MSky: 既然一个月都不太可能变动一次,那就查出来以后放缓存里呗。。。
@顾晓北: 没有用过缓存,不太懂这个,之前搜了关于缓存,都是说添加SQL依赖缓存的,也没弄太明白,每次去数据库全表扫描,导致cpu全是满负载,有缓存方面的资料可以提供么
@MSky: 缓存跟缓存依赖两个东西,缓存依赖的作用就是该清除缓存的时候自动清除缓存。。。你这一个月都不太可能变动的数据,完全可以不用缓存依赖,每天跑一次数据,放到缓存里就可以。
@MSky: 想找缓存依赖的相关信息搜sqlcachedependency,这个只是sqlserver的,而且需要sqlserver的功能配合,还有文件缓存依赖,比如一个文件被修改了,缓存自动清除。。。
先优化吧.索引加够了再说.
才1千万数据,加个index,速度飞起
要只是通过几个简单条件select ,一个亿数据也慢不到哪哎