Optimize Validator and Filter Performance

This commit is contained in:
Shadowghost
2026-01-31 19:19:26 +01:00
parent 694db80d4c
commit 2789532aa8
17 changed files with 2077 additions and 92 deletions

View File

@@ -36,6 +36,7 @@ public class BaseItemConfiguration : IEntityTypeConfiguration<BaseItemEntity>
builder.HasIndex(e => e.Path);
builder.HasIndex(e => e.ParentId);
builder.HasIndex(e => e.OwnerId);
builder.HasIndex(e => e.Name);
builder.HasIndex(e => e.ExtraType);
builder.HasIndex(e => new { e.ExtraType, e.OwnerId });
builder.HasIndex(e => e.PresentationUniqueKey);

View File

@@ -15,6 +15,7 @@ public class PeopleBaseItemMapConfiguration : IEntityTypeConfiguration<PeopleBas
builder.HasKey(e => new { e.ItemId, e.PeopleId, e.Role });
builder.HasIndex(e => new { e.ItemId, e.SortOrder });
builder.HasIndex(e => new { e.ItemId, e.ListOrder });
builder.HasIndex(e => e.PeopleId);
builder.HasOne(e => e.Item);
builder.HasOne(e => e.People);
}

View File

@@ -18,6 +18,8 @@ public class UserDataConfiguration : IEntityTypeConfiguration<UserData>
builder.HasIndex(d => new { d.ItemId, d.UserId, d.IsFavorite });
builder.HasIndex(d => new { d.ItemId, d.UserId, d.LastPlayedDate });
builder.HasIndex(d => new { d.UserId, d.ItemId, d.LastPlayedDate });
builder.HasIndex(d => new { d.UserId, d.Played, d.ItemId });
builder.HasIndex(d => new { d.UserId, d.IsFavorite, d.ItemId });
builder.HasOne(e => e.Item).WithMany(e => e.UserData);
}
}

View File

@@ -0,0 +1,45 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Jellyfin.Database.Providers.Sqlite.Migrations
{
/// <inheritdoc />
public partial class AddBaseItemNameIndex : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateIndex(
name: "IX_UserData_UserId_IsFavorite_ItemId",
table: "UserData",
columns: new[] { "UserId", "IsFavorite", "ItemId" });
migrationBuilder.CreateIndex(
name: "IX_UserData_UserId_Played_ItemId",
table: "UserData",
columns: new[] { "UserId", "Played", "ItemId" });
migrationBuilder.CreateIndex(
name: "IX_BaseItems_Name",
table: "BaseItems",
column: "Name");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_UserData_UserId_IsFavorite_ItemId",
table: "UserData");
migrationBuilder.DropIndex(
name: "IX_UserData_UserId_Played_ItemId",
table: "UserData");
migrationBuilder.DropIndex(
name: "IX_BaseItems_Name",
table: "BaseItems");
}
}
}

View File

@@ -362,6 +362,8 @@ namespace Jellyfin.Server.Implementations.Migrations
b.HasIndex("ExtraType");
b.HasIndex("Name");
b.HasIndex("OwnerId");
b.HasIndex("ParentId");
@@ -1446,8 +1448,12 @@ namespace Jellyfin.Server.Implementations.Migrations
b.HasIndex("ItemId", "UserId", "Played");
b.HasIndex("UserId", "IsFavorite", "ItemId");
b.HasIndex("UserId", "ItemId", "LastPlayedDate");
b.HasIndex("UserId", "Played", "ItemId");
b.ToTable("UserData");
b.HasAnnotation("Sqlite:UseSqlReturningClause", false);