diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py
index 2b8f2a83988680dc4548adf0a67e8523a90d74bb..2103c385cc46dcd533a544f4cc8828fb5d659204 100644
--- a/arkindex/dataimport/api.py
+++ b/arkindex/dataimport/api.py
@@ -525,10 +525,15 @@ class RepositoryList(ListAPIView):
     }
 
     def get_queryset(self):
-        return Repository.objects.filter(
-            Q(corpora__isnull=True)
-            | Q(corpora__in=Corpus.objects.readable(self.request.user))
-        ).distinct().order_by('url')
+        return Repository.objects \
+            .filter(
+                Q(corpora__isnull=True)
+                | Q(corpora__in=Corpus.objects.readable(self.request.user))
+            ) \
+            .distinct() \
+            .select_related('credentials') \
+            .prefetch_related('corpora', 'workers') \
+            .order_by('url')
 
 
 class AvailableRepositoriesList(ListCreateAPIView):
diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py
index 5fb52a988b567f2b7af1410a5d686fb80cdebb15..7d4966f51a38fc56e167bf61c1169594cff7901e 100644
--- a/arkindex/dataimport/tests/test_repos.py
+++ b/arkindex/dataimport/tests/test_repos.py
@@ -71,7 +71,8 @@ class TestRepositories(FixtureTestCase):
         self.assertEqual(Workflow.objects.count(), 0)
 
     def test_list_repository_requires_login(self):
-        response = self.client.get(reverse('api:repository-list'))
+        with self.assertNumQueries(0):
+            response = self.client.get(reverse('api:repository-list'))
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
 
     def test_list_repository_with_workers(self):
@@ -82,7 +83,8 @@ class TestRepositories(FixtureTestCase):
             repository=self.repo
         )
         self.client.force_login(self.user)
-        response = self.client.get(reverse('api:repository-list'))
+        with self.assertNumQueries(6):
+            response = self.client.get(reverse('api:repository-list'))
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         data = response.json()
         self.assertEqual(len(data['results']), 1)
@@ -103,7 +105,8 @@ class TestRepositories(FixtureTestCase):
 
     def test_list_repository_external_user(self):
         self.client.force_login(self.user)
-        response = self.client.get(reverse('api:repository-list'))
+        with self.assertNumQueries(6):
+            response = self.client.get(reverse('api:repository-list'))
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         data = response.json()
         self.assertEqual(len(data['results']), 1)
@@ -119,7 +122,8 @@ class TestRepositories(FixtureTestCase):
 
     def test_list_repository_internal_user(self):
         self.client.force_login(self.internal_user)
-        response = self.client.get(reverse('api:repository-list'))
+        with self.assertNumQueries(6):
+            response = self.client.get(reverse('api:repository-list'))
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         data = response.json()
         self.assertEqual(len(data['results']), 1)
@@ -139,7 +143,8 @@ class TestRepositories(FixtureTestCase):
         """
         self.repo.corpora.create()
         self.client.force_login(self.internal_user)
-        response = self.client.get(reverse('api:repository-list'))
+        with self.assertNumQueries(6):
+            response = self.client.get(reverse('api:repository-list'))
         self.assertEqual(response.status_code, status.HTTP_200_OK)
         data = response.json()
         self.assertEqual(len(data['results']), 1)