EF查询语句效率优化

blackeye2004 2016-01-19 03:02:24
我的查询语句是这样的。
from t in db.GameArticles where t.Type!=9 && t.Title.Contains(key) orderby t.PublishDate descending select t
不过这表总共才10000条记录,为什么这样查,速度很慢。
大家可以看看效果http://leyoufang.com/search/news?key=%E5%A4%A7
哪位大侠帮忙看下,这语句怎么写好
...全文
673 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
D56233577 2016-01-26
  • 打赏
  • 举报
回复
1. 加上AsNoTracking(); 2. 确保有合适的索引; 3. 少取一些字段。
blackeye2004 2016-01-26
  • 打赏
  • 举报
回复
引用 12 楼 hanjun0612 的回复:
速度快不快,你开一下 sql profiler看看生成的sql语句就知道了。 这个和你网络也有关系。 再不行,你就加个索引算了
我已经加了索引了,可索引看上去不管用
正怒月神 2016-01-26
  • 打赏
  • 举报
回复
速度快不快,你开一下 sql profiler看看生成的sql语句就知道了。 这个和你网络也有关系。 再不行,你就加个索引算了
正怒月神 2016-01-26
  • 打赏
  • 举报
回复
引用 13 楼 blackeye2004 的回复:
[quote=引用 12 楼 hanjun0612 的回复:] 速度快不快,你开一下 sql profiler看看生成的sql语句就知道了。 这个和你网络也有关系。 再不行,你就加个索引算了
我已经加了索引了,可索引看上去不管用[/quote] 可能是由于你使用Contains函数的关系,你看看sql profiler生成的语句是否含有 like,or等关键字,这样会取消索引的。
  • 打赏
  • 举报
回复
可以考虑用全文索引
  • 打赏
  • 举报
回复
查全表就是表扫描了,没办法,只能慢
  • 打赏
  • 举报
回复
这种查询没办法,跟EF也没什么关系,因为它对应的是SQL中的like模糊查询,差不多超过5000条以后就会明显变慢 重新索引会好一点(好多少看关键字的命中率了),但用一段时间又会变慢 可以考虑用全方索引 不过你干嘛要查全表?一般都是查几条吗(分页),加个top应该就会明显快了
blackeye2004 2016-01-25
  • 打赏
  • 举报
回复
.......难道大家都没碰到这样的问题吗?
blackeye2004 2016-01-21
  • 打赏
  • 举报
回复
如果不模糊查询,那我的怎么办,难道只能全字匹配才能查吗?再则我只对标题作模糊查询,用不着全文检索吧?
事理 2016-01-19
  • 打赏
  • 举报
回复
Ttitle建立索引后可以这样写效率应该会提升不少,因为like 'abc%'是会使用到索引的 from t in db.GameArticles where t.Type!=9 && t.Title.StartWith(key) orderby t.PublishDate descending select t
  • 打赏
  • 举报
回复
深入的技术就不多说了,先针对你现在的情况,现在当务之急是你应该把所谓的“模糊查询”的东西去掉。你这种东西本身就不能模糊地查询,你至少要在Contains 之前有一个能用到索引、能把结果缩小到很小范围的精确查询语句。
  • 打赏
  • 举报
回复
引用 楼主 blackeye2004 的回复:
from t in db.GameArticles where t.Type!=9 && t.Title.Contains(key) orderby t.PublishDate descending select t 。。。。。 这语句怎么写好
这种语句写不好! 没有使用全文检索技术,自然就是这类很慢的结果。而全文检索其实也不容易,不是随便写一个Contains就行的,需要你花点一段时间去设计分词和检索的机制。
  • 打赏
  • 举报
回复
例如我使用 http://leyoufang.com/search/news?key=31 查询,用了8秒钟,网页显示。看你的结果,你肯定是用不上索引,而且在很多地方去“模糊查询”。 这种用不上索引的查询,能有8秒就算不错了。你这个不算慢。 要想提高50倍速度,那么你就不能胡乱做什么“模糊查询”。这种查询本身就用不上索引。
事理 2016-01-19
  • 打赏
  • 举报
回复
把数据库中Title,PublishDate列建立索引
fudapeng7 2016-01-19
  • 打赏
  • 举报
回复
查询语句中能不用函数就不用函数呗
秋的红果实 2016-01-19
  • 打赏
  • 举报
回复
EF本来就效率低,这是其弱点
blackeye2004 2016-01-19
  • 打赏
  • 举报
回复
这个可能有缓存了,你换个词试试就知道了,我用的是MYSQL5.6。这个内存要求高吗
  • 打赏
  • 举报
回复
不想你说的“很慢”啊。你是八戒请来的猴子吧?

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧