接口系统采取Cache,求效率方案

接口系统采用Cache,求效率方案
现开发一套接口,远程post xml数据 返回json
有一下几个想法
1.每次拼接sql语句,从数据库读取成datatable转成json

2.每个表读取成datatable保存到Cache
  然后用.select过滤成新的datatable,转成json

3.用linq,读取List转成json

4.先把每个表List或者IEnumerable保存到Cache
然后where过滤成List转成json 

以上4种哪种效率最高,还有没有更好的方案 
求高人指点。。谢谢!!!
------解决思路----------------------
你连数据变动频率都没有,适用不适用缓存都不说,下面怎么判断呢

如果数据变动频繁,那1就是最好的方案
第二个方案不管什么情况下都排除
第三个和第一个没区别(相信你这个Linq指的是LinqToEF之类的)
个人建议数据可以缓存的情况下,用第四种方案



------解决思路----------------------
Cache要采用适当的数据结构,做到 O(1)或者O(log(n))定位数据。
如果是这种傻瓜方式,哪种情况好要看数据量与具体需求,对于一般需求来说第4种比较好。
------解决思路----------------------
如果数据变动频繁,那么就应该每次访问数据库
如果数据永远不变,直接定义成静态的

如果变但是不频繁,才应该考虑用缓存
至于使用哪种方案,还要看具体情况
------解决思路----------------------
数据变动较少的,第一次从数据库读取数据,转成json,存储成文本文件,下次调用接口,直接读取文本文件返回。
数据发生变化后,把文本文件删掉就行了。