Improve book library page query performance for author sort order (#4080)

* Add migration to create authorNames* columns, in libraryItems including update triggers and indices

* Add authorNames columns and indices to LibraryItem model

* Add database triggers for updating author names in libraryItems (for new databases)

* Populate authorNames during book scanning

* Update book sorting to use new authorNames columns

* Add an index on podcastEpisodes.publishedAt

* Fix group_concat order by and update to sqlite 3.44.2

---------

Co-authored-by: advplyr <advplyr@protonmail.com>
This commit is contained in:
mikiher 2025-03-18 00:09:49 +02:00 committed by GitHub
parent bba09626a7
commit 40504da4d7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 1133 additions and 151 deletions

View file

@ -77,6 +77,10 @@ class LibraryItem extends Model {
this.title // Only used for sorting
/** @type {string} */
this.titleIgnorePrefix // Only used for sorting
/** @type {string} */
this.authorNamesFirstLast // Only used for sorting
/** @type {string} */
this.authorNamesLastFirst // Only used for sorting
}
/**
@ -683,7 +687,9 @@ class LibraryItem extends Model {
libraryFiles: DataTypes.JSON,
extraData: DataTypes.JSON,
title: DataTypes.STRING,
titleIgnorePrefix: DataTypes.STRING
titleIgnorePrefix: DataTypes.STRING,
authorNamesFirstLast: DataTypes.STRING,
authorNamesLastFirst: DataTypes.STRING
},
{
sequelize,
@ -710,6 +716,12 @@ class LibraryItem extends Model {
{
fields: ['libraryId', 'mediaType', { name: 'titleIgnorePrefix', collate: 'NOCASE' }]
},
{
fields: ['libraryId', 'mediaType', { name: 'authorNamesFirstLast', collate: 'NOCASE' }]
},
{
fields: ['libraryId', 'mediaType', { name: 'authorNamesLastFirst', collate: 'NOCASE' }]
},
{
fields: ['libraryId', 'mediaId', 'mediaType']
},

View file

@ -122,6 +122,10 @@ class PodcastEpisode extends Model {
{
name: 'podcastEpisode_createdAt_podcastId',
fields: ['createdAt', 'podcastId']
},
{
name: 'podcast_episodes_published_at',
fields: ['publishedAt']
}
]
}