diff --git a/app/models/members/group_member.rb b/app/models/members/group_member.rb
index 39b5627d626d6936c2651a0db87626023275e4fb..9a916cd40ae9cf483c51cbcbfa48fcd53c5ab95a 100644
--- a/app/models/members/group_member.rb
+++ b/app/models/members/group_member.rb
@@ -16,9 +16,16 @@ class GroupMember < Member
   default_scope { where(source_type: SOURCE_TYPE) } # rubocop:disable Cop/DefaultScope
 
   scope :of_groups, ->(groups) { where(source_id: groups.select(:id)) }
-  scope :count_users_by_group_id, -> { joins(:user).group(:source_id).count }
   scope :of_ldap_type, -> { where(ldap: true) }
 
+  scope :count_users_by_group_id, -> do
+    if Feature.enabled?(:optimized_count_users_by_group_id)
+      group(:source_id).count
+    else
+      joins(:user).group(:source_id).count
+    end
+  end
+
   after_create :update_two_factor_requirement, unless: :invite?
   after_destroy :update_two_factor_requirement, unless: :invite?
 
diff --git a/spec/models/members/group_member_spec.rb b/spec/models/members/group_member_spec.rb
index 9b5cce1aebf437cde6d1cb77d627605e57733baa..fdb71b7ec7db32248b602502c702d9e5c909c465 100644
--- a/spec/models/members/group_member_spec.rb
+++ b/spec/models/members/group_member_spec.rb
@@ -4,7 +4,7 @@
 
 describe GroupMember do
   context 'scopes' do
-    describe '.count_users_by_group_id' do
+    shared_examples '.count_users_by_group_id' do
       it 'counts users by group ID' do
         user_1 = create(:user)
         user_2 = create(:user)
@@ -20,6 +20,36 @@
       end
     end
 
+    describe '.count_users_by_group_id with optimized_count_users_by_group_id feature flag on' do
+      before do
+        stub_feature_flags(optimized_count_users_by_group_id: true)
+      end
+
+      it_behaves_like '.count_users_by_group_id'
+
+      it 'does not JOIN users' do
+        scope = described_class.all
+        expect(scope).not_to receive(:joins).with(:user)
+
+        scope.count_users_by_group_id
+      end
+    end
+
+    describe '.count_users_by_group_id with optimized_count_users_by_group_id feature flag off' do
+      before do
+        stub_feature_flags(optimized_count_users_by_group_id: false)
+      end
+
+      it_behaves_like '.count_users_by_group_id'
+
+      it 'does JOIN users' do
+        scope = described_class.all
+        expect(scope).to receive(:joins).with(:user).and_call_original
+
+        scope.count_users_by_group_id
+      end
+    end
+
     describe '.of_ldap_type' do
       it 'returns ldap type users' do
         group_member = create(:group_member, :ldap)