엔티티 프레임 워크에서 외래 키인 열로 그룹화하는 두 개의 매우 간단한 쿼리가 있습니다. 즉 테이블 필드는 다음과 같습니다엔티티 프레임 워크 최적화 쿼리 - 시간 초과 만료
pk : Primary key
name : name of object
f1: foreign key1
f2: foreign key2
...
나는 점점 오전 시간 제한 예외는, 특히이 하나
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
쿼리는 다음과 같습니다
var q = from x in db.Table select x;
var query_1 = q.GroupBy (record => record.f1);
var query2 = q.GroupBy(record => new {record.f1, record.f2});
나는 약 30,000 레코드를 DB와 나는 왜 단순한 그룹이 시간 초과되는지 이해할 수 없다. 내가 뭘해야한다고 제안 했니? Entity Framework 4.1을 사용하고 있으므로 DB 엔진 자체에서 아무 것도 변경하지 않는 솔루션을 원하므로 구현에서 데이터베이스를 추상화하려고합니다. f1 또는 f2 (또는 둘 모두) 필드의 색인을 생성하면 더 빠른 쿼리를 얻을 수 있습니까? 그렇다면 Enfity Framework에서 인덱싱의 개념과 방법을 설명해주십시오. 타임 아웃을 늘리는 것이 해결해야 할 유일한 해결책이 아니라고 생각합니다. 문제가 더 많은 데이터로 남아있게 될까봐 걱정됩니다.
편집 : 나는 EF 마이그레이션에 대한 here을 언급 한 것을 노력했다.
그러나namespace DataAccessLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class IX_Table1_fId : DbMigration
{
public override void Up()
{
Console.WriteLine("Creating Index");
CreateIndex("Table1", "fId");
Console.WriteLine("Index Created");
}
public override void Down()
{
DropIndex("Table1", "IX_Table1_fId");
}
}
}
,이 코드가 호출되는 않습니다
나는 결과로이 클래스를 가지고? 콘솔에있는 인쇄 문이 보이지 않습니다.
'Up'과'Down' 메쏘드는 응용 프로그램 시작시 (디폴트 DB 이니셜 라이저가있는 경우) 또는 패키지 관리자 콘솔에 명시 적으로'update-database'를 입력 할 때 자동으로 호출됩니다. 후자의 경우 콘솔 출력이 블랙홀로 사라집니다. –