diff --git a/packages/backend/migration/1756824506000-optimize-drive-files-query.js b/packages/backend/migration/1756824506000-optimize-drive-files-query.js new file mode 100644 index 0000000000..0716b321fc --- /dev/null +++ b/packages/backend/migration/1756824506000-optimize-drive-files-query.js @@ -0,0 +1,19 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +export class OptimizeDriveFilesQuery1756824506000 { + name = 'OptimizeDriveFilesQuery1756824506000' + + async up(queryRunner) { + // Create optimized partial index for drive files query performance + // This index is specifically designed for the common query pattern: + // SELECT * FROM drive_file WHERE userId = ? AND folderId IS NULL ORDER BY id DESC + await queryRunner.query(`CREATE INDEX "IDX_drive_file_userid_null_folderid_id_desc" ON "drive_file" ("userId", ("folderId" IS NULL), "id" DESC)`); + } + + async down(queryRunner) { + await queryRunner.query(`DROP INDEX "IDX_drive_file_userid_null_folderid_id_desc"`); + } +} diff --git a/packages/backend/src/models/DriveFile.ts b/packages/backend/src/models/DriveFile.ts index 7b03e3e494..2bb672ea1c 100644 --- a/packages/backend/src/models/DriveFile.ts +++ b/packages/backend/src/models/DriveFile.ts @@ -10,6 +10,7 @@ import { MiDriveFolder } from './DriveFolder.js'; @Entity('drive_file') @Index(['userId', 'folderId', 'id']) +@Index('IDX_drive_file_userid_null_folderid_id_desc', { synchronize: false }) export class MiDriveFile { @PrimaryColumn(id()) public id: string;