首页 新闻 会员 周边

使用EF 5 单表数据大于500W,这个时候查询就会变得很慢。想要做分表,但是不知道EF该怎么分。

1
悬赏园豆:50 [已解决问题] 解决于 2014-04-10 17:55

项目使用的时间长了,数据量就慢慢上来了,就会导致查询越来越慢,这个时候以前用ADO.net的时候,基本都是用的 分表的操作来控制查询效率的。

例如,财务流水账数据,一个月分一张表,或者一年分一张表。

但是现在用EF,却不知道怎么办了。

请大家帮帮忙。

fjc1988的主页 fjc1988 | 初学一级 | 园豆:109
提问于:2014-03-27 01:09
< >
分享
最佳答案
0

分区表吗? 如果是的话, 和ef没关系。 只要在数据库里做配置就可以。 另外500w数据量不大, 用好分页和索引, 性能绝对不是问题

收获园豆:30
Jerry柯 | 菜鸟二级 |园豆:496 | 2014-03-28 15:11
其他回答(5)
0

500为什么会变慢?是你没加索引吧``

吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-27 09:02

 就算加了索引,我对这个表的查询,要做按照日期区间来查询,本身就可以分成每个月一个表,这样效率就会很高了。 但是EF 我就不知道怎么分。

支持(0) 反对(0) fjc1988 | 园豆:109 (初学一级) | 2014-03-27 12:34

@fjc1988: 其实是一样的,分表时你定位表的操作其实也是是使用一个索引.分表并不会提高效率.

分表只会提高逻辑复杂度.不会对数据库性能产生优化

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-27 13:06

@fjc1988: 很显然你的索引没建好, 才500万的数据.....

使用存储过程来进行查询, 不要用EF, EF在查询后面的页码时, 得先把数据都拿到内存中, 再去查询 take.

直接在数据库, 用存储过程查很快的.

主键不要建在Id列上. 这是唯一一个聚集索引, 好好利用.

再参考sql的查询分析器给出的一些数据进行优化

支持(0) 反对(1) ^清小怨 | 园豆:200 (初学一级) | 2015-11-05 17:29
0

有没有延迟加载,或上马

Yu | 园豆:12980 (专家六级) | 2014-03-27 10:18
0

使用表分区应该观点用吧,不分表。

收获园豆:10
于为源 | 园豆:956 (小虾三级) | 2014-03-27 12:38

表分区确实可以解决一定的性能问题,但是从长远来说,还是增加了查询逻辑的复杂性。

例如,现在我想按照地区来给数据表分表,这样的业务是现实存在的。

这样分表后,每个表就是一个区域了,把数据量水平分割了并且查询逻辑也变得简单了。

支持(0) 反对(0) fjc1988 | 园豆:109 (初学一级) | 2014-03-27 12:46

@fjc1988: 有道理,但是也没有做过这种EF分表的处理。关注一下,不好意思啊。

支持(0) 反对(0) 于为源 | 园豆:956 (小虾三级) | 2014-03-27 13:46
0

实体框架原本就满足你的情况(数据多了很慢,至少4.1的版本就这样)

迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2014-03-28 13:29
0

不要分表 用表分区 sql2005 之上都支持

收获园豆:10
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-04-10 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册