diff --git a/server/models/Book.js b/server/models/Book.js index 69194af6..b17afc6d 100644 --- a/server/models/Book.js +++ b/server/models/Book.js @@ -151,7 +151,27 @@ module.exports = (sequelize) => { genres: DataTypes.JSON }, { sequelize, - modelName: 'book' + modelName: 'book', + indexes: [ + { + fields: [{ + name: 'title', + collate: 'NOCASE' + }] + }, + { + fields: [{ + name: 'titleIgnorePrefix', + collate: 'NOCASE' + }] + }, + { + fields: ['publishedYear'] + }, + { + fields: ['duration'] + } + ] }) return Book diff --git a/server/models/LibraryItem.js b/server/models/LibraryItem.js index 85595e3b..76e10b8c 100644 --- a/server/models/LibraryItem.js +++ b/server/models/LibraryItem.js @@ -63,6 +63,10 @@ module.exports = (sequelize) => { */ static getLibraryItemsIncrement(offset, limit) { return this.findAll({ + benchmark: true, + logging: (sql, timeMs) => { + console.log(`[Query] Elapsed ${timeMs}ms.`) + }, include: [ { model: sequelize.models.book, @@ -89,7 +93,7 @@ module.exports = (sequelize) => { ['createdAt', 'ASC'], // Ensure author & series stay in the same order [sequelize.models.book, sequelize.models.author, sequelize.models.bookAuthor, 'createdAt', 'ASC'], - [sequelize.models.book, sequelize.models.series, 'bookSeries', 'createdAt', 'ASC'], + [sequelize.models.book, sequelize.models.series, 'bookSeries', 'createdAt', 'ASC'] ], offset, limit @@ -702,6 +706,15 @@ module.exports = (sequelize) => { }, { fields: ['mediaId'] + }, + { + fields: ['libraryId', 'mediaType'] + }, + { + fields: ['birthtime'] + }, + { + fields: ['mtime'] } ] }) diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js index 4d470c48..8b4a7221 100644 --- a/server/utils/queries/libraryItemsBookFilters.js +++ b/server/utils/queries/libraryItemsBookFilters.js @@ -257,7 +257,7 @@ module.exports = { if (global.ServerSettings.sortingIgnorePrefix) { return [[Sequelize.literal('titleIgnorePrefix COLLATE NOCASE'), dir]] } else { - return [[Sequelize.literal('title COLLATE NOCASE'), dir]] + return [[Sequelize.literal('`book`.`title` COLLATE NOCASE'), dir]] } } else if (sortBy === 'sequence') { const nullDir = sortDesc ? 'DESC NULLS FIRST' : 'ASC NULLS LAST' @@ -546,6 +546,10 @@ module.exports = { distinct: true, attributes: bookAttributes, replacements, + benchmark: true, + logging: (sql, timeMs) => { + console.log(`[Query] Elapsed ${timeMs}ms.`) + }, include: [ { model: Database.models.libraryItem,