diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py
index 75126eda2bb3ba3d044315b38e5f7e5c4bee2e34..ba29a066b13764115a6d8776a661c6229fde65d7 100644
--- a/api/funkwhale_api/music/models.py
+++ b/api/funkwhale_api/music/models.py
@@ -284,7 +284,7 @@ class AlbumQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet):
 class Album(APIModelMixin):
     title = models.CharField(max_length=MAX_LENGTHS["ALBUM_TITLE"])
     artist = models.ForeignKey(Artist, related_name="albums", on_delete=models.CASCADE)
-    release_date = models.DateField(null=True, blank=True)
+    release_date = models.DateField(null=True, blank=True, db_index=True)
     release_group_id = models.UUIDField(null=True, blank=True)
     cover = VersatileImageField(
         upload_to="albums/covers/%Y/%m/%d", null=True, blank=True
@@ -415,7 +415,7 @@ def import_album(v):
 
 class TrackQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet):
     def for_nested_serialization(self):
-        return self.select_related().select_related("album__artist", "artist")
+        return self.prefetch_related("artist", "album__artist")
 
     def annotate_playable_by_actor(self, actor):
 
diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py
index 9de7851161bcdbe976f55ed2b644b0b877876689..580ac28b707f400c60781d4f9dde452613d21cb5 100644
--- a/api/funkwhale_api/music/views.py
+++ b/api/funkwhale_api/music/views.py
@@ -50,7 +50,7 @@ def get_libraries(filter_uploads):
         qs = models.Library.objects.filter(
             pk__in=uploads.values_list("library", flat=True)
         ).annotate(_uploads_count=Count("uploads"))
-        qs = qs.select_related("actor")
+        qs = qs.prefetch_related("actor")
         page = self.paginate_queryset(qs)
         if page is not None:
             serializer = federation_api_serializers.LibrarySerializer(page, many=True)
@@ -104,6 +104,7 @@ class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelV
                 to_attr="_prefetched_tracks",
             )
         )
+        .order_by("-id")
     )
     serializer_class = serializers.ArtistWithAlbumsSerializer
     permission_classes = [oauth_permissions.ScopePermission]
@@ -147,8 +148,8 @@ class ArtistViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelV
 class AlbumViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelViewSet):
     queryset = (
         models.Album.objects.all()
-        .order_by("artist", "release_date")
-        .select_related("artist", "attributed_to")
+        .order_by("-creation_date")
+        .prefetch_related("artist", "attributed_to")
     )
     serializer_class = serializers.AlbumSerializer
     permission_classes = [oauth_permissions.ScopePermission]
@@ -173,7 +174,7 @@ class AlbumViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelVi
     def get_queryset(self):
         queryset = super().get_queryset()
         tracks = (
-            models.Track.objects.select_related("artist")
+            models.Track.objects.prefetch_related("artist")
             .with_playable_uploads(utils.get_actor_from_request(self.request))
             .order_for_album()
         )
@@ -235,7 +236,7 @@ class LibraryViewSet(
         library = self.get_object()
         queryset = (
             library.received_follows.filter(target__actor=self.request.user.actor)
-            .select_related("actor", "target__actor")
+            .prefetch_related("actor", "target__actor")
             .order_by("-creation_date")
         )
         page = self.paginate_queryset(queryset)
@@ -257,7 +258,8 @@ class TrackViewSet(common_views.SkipFilterForGetObject, viewsets.ReadOnlyModelVi
     queryset = (
         models.Track.objects.all()
         .for_nested_serialization()
-        .select_related("attributed_to")
+        .prefetch_related("attributed_to")
+        .order_by("-creation_date")
     )
     serializer_class = serializers.TrackSerializer
     permission_classes = [oauth_permissions.ScopePermission]
@@ -454,7 +456,9 @@ class ListenViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
     def retrieve(self, request, *args, **kwargs):
         track = self.get_object()
         actor = utils.get_actor_from_request(request)
-        queryset = track.uploads.select_related("track__album__artist", "track__artist")
+        queryset = track.uploads.prefetch_related(
+            "track__album__artist", "track__artist"
+        )
         explicit_file = request.GET.get("upload")
         if explicit_file:
             queryset = queryset.filter(uuid=explicit_file)
@@ -493,7 +497,7 @@ class UploadViewSet(
     queryset = (
         models.Upload.objects.all()
         .order_by("-creation_date")
-        .select_related("library", "track__artist", "track__album__artist")
+        .prefetch_related("library", "track__artist", "track__album__artist")
     )
     serializer_class = serializers.UploadForOwnerSerializer
     permission_classes = [
@@ -577,7 +581,7 @@ class Search(views.APIView):
         qs = (
             models.Track.objects.all()
             .filter(query_obj)
-            .select_related("artist", "album__artist")
+            .prefetch_related("artist", "album__artist")
         )
         return common_utils.order_for_search(qs, "title")[: self.max_results]
 
@@ -587,8 +591,7 @@ class Search(views.APIView):
         qs = (
             models.Album.objects.all()
             .filter(query_obj)
-            .select_related()
-            .prefetch_related("tracks__artist")
+            .prefetch_related("tracks__artist", "artist", "attributed_to")
         )
         return common_utils.order_for_search(qs, "title")[: self.max_results]