首页 新闻 会员 周边 捐助

关于EF 查询语句的效率

0
悬赏园豆:10 [待解决问题]

我的查询语句是这样的。

from t in db.GameArticles where t.Type!=9 && t.Title.Contains(key) orderby t.PublishDate descending select t

不过这表总共才7800条记录,为什么这样查,速度很慢。

大家可以看看效果http://leyoufang.com/search/news?key=%E5%A4%A7

哪位大侠帮忙看下,这语句怎么写好

问题补充:

这样的问题,大家平时都没遇到过吗?

tonyhangzhou的主页 tonyhangzhou | 初学一级 | 园豆:41
提问于:2015-12-10 22:55
< >
分享
所有回答(3)
0

可以参考这篇文章:http://www.cnblogs.com/CreateMyself/p/4746258.html

Jeffcky | 园豆:2789 (老鸟四级) | 2015-12-10 23:09
0

你改成2条用union连接起来的查询。分别是

from t in db.GameArticles where t.Type<9 && t.Title.Contains(key) orderby t.PublishDate descending select t

from t in db.GameArticles where t.Type>9 && t.Title.Contains(key) orderby t.PublishDate descending select t

试试

吴瑞祥 | 园豆:29449 (高人七级) | 2015-12-11 10:41

这样分开有什么特别的意义吗

支持(0) 反对(0) tonyhangzhou | 园豆:41 (初学一级) | 2015-12-11 21:53

@tonyhangzhou: 楼下是对的.我没注意后面还有个like查询.不等于用union优化不明显,逻辑或的情况才明显.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2015-12-12 08:32
0

用profiler 抓下生成的sql语句看下,这个linq 看起来是没什么问题的。

 t.Title.Contains(key) 猜测是这里引发的查询缓慢

很大可能性是问题 title 这个字段没有索引,而where语句对这个title 进行了like 的模糊查询导致。

Sky.Grain | 园豆:308 (菜鸟二级) | 2015-12-11 15:32

title字段有索引的,没啥用啊。跟我把MYSQL的内存使用限制到50M有关系吗

支持(0) 反对(0) tonyhangzhou | 园豆:41 (初学一级) | 2015-12-11 21:53

@tonyhangzhou: 先抓下 linq 生成出来的 sql语句,如果sql语句是正常的,那就是还有别的因素在制约这个速度。

支持(0) 反对(0) Sky.Grain | 园豆:308 (菜鸟二级) | 2015-12-11 21:54

@tonyhangzhou: 另外 like (%XXX%) 百分号前置时,是不会走索引搜索的

支持(0) 反对(0) Sky.Grain | 园豆:308 (菜鸟二级) | 2015-12-11 21:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册