首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架从Azure sql获取数据大约需要10分钟。

实体框架从Azure sql获取数据大约需要10分钟。
EN

Stack Overflow用户
提问于 2015-09-22 17:50:18
回答 1查看 311关注 0票数 0

我有一个Azure sql数据库,我在其中记录聊天日志,然后分析这些日志。这个查询在开始时是很好的,但是目前它有大约1100万个条目,我花了586秒才得到数据。

我的模型

代码语言:javascript
复制
public class Messages
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Index]
    public DateTime Timestamp { get; set; }
    public string Message { get; set; }
    public string Username { get; set; }

    public int ChannelId { get; set; }

    [ForeignKey("ChannelId")]
    public virtual Channel Channel { get; set; }
}

数据库调用

代码语言:javascript
复制
                IEnumerable<Messages> messages = context.Messages.AsNoTracking()
                                     .Where(x => x.Channel.ChannelName == Channelname &&
                                     x.Timestamp > StartTime &&
                                     x.Timestamp < EndTime).ToArray();

数据一旦插入,就只能读取。我尝试过索引时间戳列,但似乎没有帮助。数据也是按日期时间排序的,所以我不明白为什么要花那么长时间。

更新:

我做了一些招数

我的方式Channel.ChannelName == Channelname: 4:35

我的方式Channel.ChannelId == Id: 16秒

建议答覆: 4:30

建议使用id: 16秒

样品为40k。

我该怎么解决这个问题?我能优化更多吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 18:04:01

您的频道表有正确的键和索引吗?另外,首先尝试筛选不是外部表的属性(例如: Channel)。

代码语言:javascript
复制
var messages = context.Messages.AsNoTracking()
         .Where(m => (m.Timestamp > StartTime) && (m.Timestamp < EndTime))
         .Where(x => x.Channel.ChannelName == Channelname)
         .ToArray();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32723570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档