내가 두 개체일대일 또는 다 대일 CF9 ORM 2에 따라서 나는 여러 homeFeatures이있는 각이있다
HomeFeatures
<cfcomponent persistent="true">
<cfproperty name="id" column="homeFeatureid">
<cfproperty name="tabTitle">
<cfproperty name="title">
<cfproperty name="description">
<cfproperty name="sort">
<cfproperty name="moretext">
<cfproperty name="url">
<cfproperty name="active">
<cfproperty name="media" fieldtype="many-to-one" fkcolumn="mediaid" cfc="media" lazy="false" fetch="join" missingrowIgnored="true">
</cfcomponent>
그리고
Media
<cfcomponent persistent="true" table="cms.dbo.media">
<cfproperty name="id" column="mediaid">
<cfproperty name="filename">
</cfcomponent>
가 조회 그것과 관련된 미디어 항목. 동일한 미디어 항목이 여러 homeFeatures와 연관 될 수 있지만 각 homeFeature는 homeFeatures.mediaid로 연결된 하나의 미디어 항목 만 가질 수 있습니다.
엔티티로드 ("homeFeatures")를 수행하면 homeFeatures에 대한 쿼리 1 개와 모든 행의 homeFeatures에 대한 미디어 테이블에 대한 쿼리 1 개가 생성됩니다. 즉 이것은 N + 1 문제입니다. 왜? 이 값은 총 2 개의 쿼리 여야합니다. 하나는 모든 homeFeatures를 가져오고, 다른 하나는 homeFeatures에 의해 결정된 목록에있는 미디어 ID의 모든 미디어를 가져와야합니다. http://www.rupeshk.org/blog/index.php/2009/09/coldfusion-orm-performance-tuning-fetching-strategy/에 정의 된대로 "열망하는"로딩을 시도하고 있고 어도비 워드 프로세서에서 시도하고 있습니다.
이 특정보기에서는 모든 항목에 대한 미디어 레코드에 액세스해야하므로 lazy가 false로 설정된 이유입니다. 나는 lazy = false | true, batch = 999, fieldtype = one-to-one | many-to-one의 모든 반복을 시도했지만, fetch = join | select는 모두 똑같은 N + 1 문제를 발생시킨다.
아이디어가 있으십니까? 도와주세요!
그래서'fetch = "join"'은 여전히 자식 객체로부터 많은'SELECT'을 얻습니다. 객체를 변경 한 후에'ORMReload()'를 실행했는지 확인 했습니까? –
이것은 디버그 플랫폼이므로'onRequestStart()'에'ormReload()'가 있습니다. 또한 각 부모 개체에 대해 select 문을 얻으므로 로그는'부모 DB 개체의 mediaid = (부모 mediaid) '파일을 각 부모 DB 행에 대해 한 번씩 반복하도록합니다. – Nucleon
나는 내 iPad에있어 내일까지 답변을 얻을 수 없습니다. 단단히 매달 리고 비실용적 인 일은하지 마십시오. –