From 4ec9c3ea73e6c7f0b81ae5873755bef3b7295521 Mon Sep 17 00:00:00 2001 From: caipira113 Date: Thu, 4 Sep 2025 00:02:53 +0900 Subject: [PATCH] perf(backend): optimize drive/files query for old root content --- ...756824506000-optimize-drive-files-query.js | 19 +++++++++++++++++++ packages/backend/src/models/DriveFile.ts | 1 + 2 files changed, 20 insertions(+) create mode 100644 packages/backend/migration/1756824506000-optimize-drive-files-query.js 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;