mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat: optimize search (#7387)
I am moving the strategies join to later part of query, because it is not used for filtering, only need it for data.
This commit is contained in:
		
							parent
							
								
									1c2aa128be
								
							
						
					
					
						commit
						906940948b
					
				@ -164,12 +164,6 @@ class FeatureSearchStore implements IFeatureSearchStore {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                selectColumns = [
 | 
					                selectColumns = [
 | 
				
			||||||
                    ...selectColumns,
 | 
					                    ...selectColumns,
 | 
				
			||||||
                    this.db.raw(
 | 
					 | 
				
			||||||
                        'has_strategies.feature_name IS NOT NULL AS has_strategies',
 | 
					 | 
				
			||||||
                    ),
 | 
					 | 
				
			||||||
                    this.db.raw(
 | 
					 | 
				
			||||||
                        'enabled_strategies.feature_name IS NOT NULL AS has_enabled_strategies',
 | 
					 | 
				
			||||||
                    ),
 | 
					 | 
				
			||||||
                    this.db.raw(`CASE
 | 
					                    this.db.raw(`CASE
 | 
				
			||||||
                            WHEN dependent_features.parent = features.name THEN 'parent'
 | 
					                            WHEN dependent_features.parent = features.name THEN 'parent'
 | 
				
			||||||
                            WHEN dependent_features.child = features.name THEN 'child'
 | 
					                            WHEN dependent_features.child = features.name THEN 'child'
 | 
				
			||||||
@ -248,8 +242,6 @@ class FeatureSearchStore implements IFeatureSearchStore {
 | 
				
			|||||||
                        'features.created_by_user_id',
 | 
					                        'features.created_by_user_id',
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                this.applyStrategiesByEnvironment(query);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                query.leftJoin('last_seen_at_metrics', function () {
 | 
					                query.leftJoin('last_seen_at_metrics', function () {
 | 
				
			||||||
                    this.on(
 | 
					                    this.on(
 | 
				
			||||||
                        'last_seen_at_metrics.environment',
 | 
					                        'last_seen_at_metrics.environment',
 | 
				
			||||||
@ -329,6 +321,8 @@ class FeatureSearchStore implements IFeatureSearchStore {
 | 
				
			|||||||
            .joinRaw('CROSS JOIN total_features')
 | 
					            .joinRaw('CROSS JOIN total_features')
 | 
				
			||||||
            .whereBetween('final_rank', [offset + 1, offset + limit])
 | 
					            .whereBetween('final_rank', [offset + 1, offset + limit])
 | 
				
			||||||
            .orderBy('final_rank');
 | 
					            .orderBy('final_rank');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.applyStrategiesByEnvironment(finalQuery);
 | 
				
			||||||
        if (featureLifecycleEnabled) {
 | 
					        if (featureLifecycleEnabled) {
 | 
				
			||||||
            finalQuery.leftJoin(
 | 
					            finalQuery.leftJoin(
 | 
				
			||||||
                'lifecycle',
 | 
					                'lifecycle',
 | 
				
			||||||
@ -357,6 +351,14 @@ class FeatureSearchStore implements IFeatureSearchStore {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private applyStrategiesByEnvironment(queryBuilder: Knex.QueryBuilder) {
 | 
					    private applyStrategiesByEnvironment(queryBuilder: Knex.QueryBuilder) {
 | 
				
			||||||
 | 
					        queryBuilder.select(
 | 
				
			||||||
 | 
					            this.db.raw(
 | 
				
			||||||
 | 
					                'has_strategies.feature_name IS NOT NULL AS has_strategies',
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            this.db.raw(
 | 
				
			||||||
 | 
					                'enabled_strategies.feature_name IS NOT NULL AS has_enabled_strategies',
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
        queryBuilder
 | 
					        queryBuilder
 | 
				
			||||||
            .leftJoin(
 | 
					            .leftJoin(
 | 
				
			||||||
                this.db
 | 
					                this.db
 | 
				
			||||||
@ -370,11 +372,11 @@ class FeatureSearchStore implements IFeatureSearchStore {
 | 
				
			|||||||
                    this.on(
 | 
					                    this.on(
 | 
				
			||||||
                        'enabled_strategies.feature_name',
 | 
					                        'enabled_strategies.feature_name',
 | 
				
			||||||
                        '=',
 | 
					                        '=',
 | 
				
			||||||
                        'features.name',
 | 
					                        'ranked_features.feature_name',
 | 
				
			||||||
                    ).andOn(
 | 
					                    ).andOn(
 | 
				
			||||||
                        'enabled_strategies.environment',
 | 
					                        'enabled_strategies.environment',
 | 
				
			||||||
                        '=',
 | 
					                        '=',
 | 
				
			||||||
                        'feature_environments.environment',
 | 
					                        'ranked_features.environment',
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
@ -388,11 +390,11 @@ class FeatureSearchStore implements IFeatureSearchStore {
 | 
				
			|||||||
                    this.on(
 | 
					                    this.on(
 | 
				
			||||||
                        'has_strategies.feature_name',
 | 
					                        'has_strategies.feature_name',
 | 
				
			||||||
                        '=',
 | 
					                        '=',
 | 
				
			||||||
                        'features.name',
 | 
					                        'ranked_features.feature_name',
 | 
				
			||||||
                    ).andOn(
 | 
					                    ).andOn(
 | 
				
			||||||
                        'has_strategies.environment',
 | 
					                        'has_strategies.environment',
 | 
				
			||||||
                        '=',
 | 
					                        '=',
 | 
				
			||||||
                        'feature_environments.environment',
 | 
					                        'ranked_features.environment',
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user