우리는 고객을위한 새로운 시스템을 개발하고 있으며 우리는 약 23600 명의 구성원으로 구성된 구성원 테이블을 가지고 있습니다. 그리고 우리가 그들 모두를 얻으려고 할 때 시간이 지납니다. SQL 프로파일 러를 사용하여 질문을 받고 그것을 분리하여 실행하고 약 3 초가 걸렸습니다.nHibernate 큰 쿼리 시간 초과
using (ISession s = SessionFactory.OpenSession())
{
return CreateCriteria(typeof(Member)).List<Member>();
}
23600 개체의 결과 매핑이 너무 오래 걸린 것처럼 보입니다. 예제를 300으로 제한하면 (.SetMaxResults (300)) 결과가 제대로 작동합니다. 최종 시스템에서 실제로 모든 구성원을 얻으려면 지금 당장 알지 못하지만, 대부분의 구성원이 우리 사이트의 멤버 자격 공급자에서 자신의 계정을 생성하도록 할 때가 언제인지 알고 있습니다.
회원 매핑 (유창 nHibernate 수) :
Id(x => x.ID).Default("NEWID()");
Map(x => x.LegacyID).ReadOnly();
Map(x => x.Username).Length(32);
Map(x => x.Password).Length(32);
Map(x => x.MemberID).Length(10);
Map(x => x.FirstName).Length(50);
Map(x => x.LastName).Length(50);
Map(x => x.Gender).CustomType<int>();
Map(x => x.BirthDate);
Component(c => c.Home);
Map(x => x.Email).Length(80);
Map(x => x.SendInformation).CustomType<int>();
Map(x => x.SendInvoice).CustomType<int>();
Map(x => x.Comment);
Map(x => x.PublicProfile);
Map(x => x.EntryDate);
Map(x => x.ResignationDate);
References<ProfileItem>(x => x.MemberStatus, "StatusID");
References<ProfileItem>(x => x.MemberType, "TypeID");
References<ProfileItem>(x => x.NationalAssociation);
References<ProfileItem>(x => x.Position, "PositionID");
References<ProfileItem>(x => x.SpecialSkills, "SpecialSkillsID");
References<ProfileItem>(x => x.CompanyType, "CompanyTypeID");
References<ProfileItem>(x => x.JobType, "JobTypeID");
References<ProfileItem>(x => x.GraduateCity, "GraduateCityID");
HasManyToMany<ProfileItem>(x => x.Interessts).Table("MemberInterests")
.ParentKeyColumn("UserID").ChildKeyColumn("ProfileItemID").Cascade.AllDeleteOrphan().Not.LazyLoad();
HasManyToMany<ProfileItem>(x => x.Properties).Table("MemberProperties")
.ParentKeyColumn("UserID").ChildKeyColumn("ProfileItemID").Cascade.AllDeleteOrphan().Not.LazyLoad();
Component(c => c.Company).ColumnPrefix("Work");
Component(c => c.Invoice).ColumnPrefix("Invoice");
Map(x => x.Created);
Map(x => x.CreatedBy).Length(32);
Map(x => x.LatestChange);
Map(x => x.LatestChangeBy).Length(32);
Map(x => x.ElementarySchool);
Map(x => x.University);
Map(x => x.GraduateYear);
Map(x => x.Title).Length(50);
Map(x => x.LibraryAccess);
누구든지이 문제 나 해결 방법을하는 방법에 대해 아무것도 알지?
시간 증가가 선형입니까 (최대 값은 100, 200, 300)? 제한된 컬렉션의 IMO는 항상 일괄 처리 (페이지 매김)해야합니다. – Firo
다른 멤버를 가져 와서 이러한 멤버를 가져 와서 무국적 세션 사용을 고려하고 싶다면 – Rippo