@@ -110,7 +110,8 @@ export async function calculatePartnerRanking({
110110
111111 const offset = ( page - 1 ) * pageSize ;
112112
113- // Helper function to build discoverable partners filter with any alias
113+ // Helper function to build discoverable partners filter with any alias to reuse in subqueries
114+ // This dramatically reduces the dataset from 1.5M to 5,000 before expensive joins
114115 const buildDiscoverablePartnersFilter = ( alias : string ) => {
115116 const conditions : Prisma . Sql [ ] = [
116117 Prisma . sql `${ Prisma . raw ( alias ) } .discoverableAt IS NOT NULL` ,
@@ -129,27 +130,18 @@ export async function calculatePartnerRanking({
129130 return Prisma . join ( conditions , " AND " ) ;
130131 } ;
131132
132- // OPTIMIZATION: Build filter for discoverable partners to reuse in subqueries
133- // This dramatically reduces the dataset from 1.5M to 5,000 before expensive joins
134- const discoverablePartnersFilter =
135- buildDiscoverablePartnersFilter ( "p_filter" ) ;
136-
137- // Build filter for all-program metrics join (uses different alias)
138- const discoverablePartnersAllProgramsFilter =
139- buildDiscoverablePartnersFilter ( "p_filter_all" ) ;
140-
141133 // Metrics across ALL programs (for display purposes)
142134 const allProgramMetricsJoin = Prisma . sql `LEFT JOIN (
143135 SELECT
144136 pe_all.partnerId,
145137 MAX(pe_all.lastConversionAt) as lastConversionAt,
146138 AVG(COALESCE(pe_all.conversionRate, 0)) as avgConversionRate
147- FROM ProgramEnrollment pe_all
139+ FROM ProgramEnrollment pe_all FORCE INDEX (ProgramEnrollment_partnerId_programId_key)
148140 -- OPTIMIZATION: Only process enrollments for discoverable partners (using subquery to avoid JOIN)
149141 WHERE pe_all.partnerId IN (
150142 SELECT p_filter_all.id
151143 FROM Partner p_filter_all
152- WHERE ${ discoverablePartnersAllProgramsFilter }
144+ WHERE ${ buildDiscoverablePartnersFilter ( "p_filter_all" ) }
153145 )
154146 AND pe_all.programId != ${ ACME_PROGRAM_ID }
155147 AND pe_all.totalConversions > 0
@@ -193,12 +185,12 @@ export async function calculatePartnerRanking({
193185 )) as similarityScore,
194186 -- Program match score: Count of similar programs (0-15 points)
195187 LEAST(15, COUNT(DISTINCT pe2.programId) * 2) as programMatchScore
196- FROM ProgramEnrollment pe2
188+ FROM ProgramEnrollment pe2 FORCE INDEX (ProgramEnrollment_partnerId_programId_key)
197189 -- OPTIMIZATION: Only process enrollments for discoverable partners (using subquery to avoid JOIN)
198190 WHERE pe2.partnerId IN (
199191 SELECT p_filter.id
200192 FROM Partner p_filter
201- WHERE ${ discoverablePartnersFilter }
193+ WHERE ${ buildDiscoverablePartnersFilter ( "p_filter" ) }
202194 )
203195 AND pe2.programId IN (${ Prisma . join ( similarPrograms . map ( ( sp ) => sp . programId ) ) } )
204196 AND pe2.status = 'approved'
@@ -212,14 +204,6 @@ export async function calculatePartnerRanking({
212204 WHERE FALSE
213205 ) similarProgramMetrics ON similarProgramMetrics.partnerId = p.id` ;
214206
215- // Build discoverable partners subquery for main FROM clause
216- const discoverablePartnersSubqueryFilter =
217- buildDiscoverablePartnersFilter ( "p_sub" ) ;
218-
219- // Build discoverable partners filter for categories subquery
220- const discoverablePartnersCategoriesFilter =
221- buildDiscoverablePartnersFilter ( "p_cat" ) ;
222-
223207 const partners = await prisma . $queryRaw < Array < any >> `
224208 SELECT
225209 p.*,
@@ -252,7 +236,7 @@ export async function calculatePartnerRanking({
252236 -- This dramatically reduces the dataset from 1.5M to 5,000 before expensive joins
253237 SELECT p_sub.*
254238 FROM Partner p_sub
255- WHERE ${ discoverablePartnersSubqueryFilter }
239+ WHERE ${ buildDiscoverablePartnersFilter ( "p_sub" ) }
256240 ) p
257241
258242 -- Current program enrollment (for display metrics and filtering)
@@ -273,12 +257,12 @@ export async function calculatePartnerRanking({
273257 SELECT
274258 pe5.partnerId,
275259 GROUP_CONCAT(DISTINCT pc.category ORDER BY pc.category SEPARATOR ',') as categories
276- FROM ProgramEnrollment pe5
260+ FROM ProgramEnrollment pe5 FORCE INDEX (ProgramEnrollment_partnerId_programId_key)
277261 JOIN ProgramCategory pc ON pc.programId = pe5.programId
278262 WHERE pe5.partnerId IN (
279263 SELECT p_cat.id
280264 FROM Partner p_cat
281- WHERE ${ discoverablePartnersCategoriesFilter }
265+ WHERE ${ buildDiscoverablePartnersFilter ( "p_cat" ) }
282266 )
283267 AND pe5.status = 'approved'
284268 GROUP BY pe5.partnerId
0 commit comments