У меня есть база данных Azure sql, в которой я записываю журналы чата, которые позже анализирую. Запрос был в порядке, но в настоящее время он имеет около 11 миллионов записей, и мне потребовалось 586 секунд, чтобы получить данные.Структура Entity занимает около 10 минут, чтобы получить данные из Azure sql
Моя модель
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; }
}
База данных вызовов
IEnumerable<Messages> messages = context.Messages.AsNoTracking()
.Where(x => x.Channel.ChannelName == Channelname &&
x.Timestamp > StartTime &&
x.Timestamp < EndTime).ToArray();
данных после вставки только для чтения. Я попытался индексировать столбец timestamp, но, похоже, не помог. Данные также сортируются по дате, поэтому я не понимаю, почему так долго.
UPDATE:
Я некоторые bechmarks
Мой путь Channel.ChannelName == Channelname: 4:35
Мой путь Channel.ChannelId == Id: 16sec
Отдается ответ : 4:30
Предлагается с идентификатором: 16 с
образец был 40k результатов.
Как исправить это? Могу ли я оптимизировать больше?
Если вы создали Хранимую процедуру и передали ей параметры, вы быстро получаете результаты? Ответ на этот вопрос скажет нам, искать ли в БД или код для ответов. –
Попробуйте запустить сгенерированный SQL в SQL-менеджере, также запустить анализатор запросов против него – 3dd
Сколько строк в вашем результате? –